Master/Detail vs. List Application

Now this is probably a matter of preference more than anything, but while playing in the OpenSAP class, the big styles they keep working with are the master/detail list vs. the list.  The best way to describe the difference is an iOS application (one left is a list pane, on the right are the details) vs. a full on list (full screen table).  Now, what I am trying to figure out is if I keep my applications in the same format as I originally designed them.  The supervisor transaction is probably the best example.

In the original application, I provide the mass change option to update multiple orders at one time, or run availability on multiple orders, etc…  if you build something in a master/detail version, you lose this functionality.  On the flip side, it is pretty easy to update orders one at a time.  Execution is clearly a master/detail scenario in my mind, but for the supervisor, I’m curious how you might feel?  If I were executing this on a computer only, I’d probably go with the list format, because I like the mass change option.  But since the goal is to be device agnostic, do I give up on the mass change?  I could certainly provide the functionality to reschedule all, run availability on all…  but not on selected orders.

My question to all of you…  if you were managing the service shop, would you be using mass change of orders very often?  Reschedule selected orders?  Run material availability on multiple orders?

Love to hear your opinions,
Thanks for reading,

Customer Service – Too Little too Late

Well, I’ve recently talked about my experiments to cut cable and move to purely internet TV.  Well, a couple weeks ago I made it official.  Of course, that meant the obligatory call to AT&T to cancel my TV service.  I had a pretty low package on U-Verse, but was still spending almost $90/month.  That got me 200 channels.  No movie channels, and about 10 channels that we ever watched.  Well, I was able to get Playstation Vue for $30/month.  That’s $60/month back in my pocket.  Of course, AT&T asked the question “Why are you leaving?”

Well, my answer was pretty simple.  I’m using internet TV, it’s cheaper and works better.  Well, suddenly when I tell them I’m leaving, they have all these deals they offer to me.  On of them was getting satellite TV for $60/month or something like that.  I didn’t ask the rep, but the whole time I’m thinking, “why don’t you offer this before I threaten to leave?”.  So, here’s how I look at the situation.  AT&T makes a butt-load of money providing TV, internet & the hardware (DVR, Modems, Routers, etc…).  So my question is why can they offer such great deals when you threaten to leave, and not just offer you the best deals outright???

You know as well as I do, the answer is the bottom line.  If a customer is willing to pay more for the service, why not take their money???  The problem I have is that it’s easier to overcharge a customer and assume they will never complain.  If you complain, you might get a deal.  For example, I had to complain every 3-6 months to get the latest deal that AT&T could offer.  They wouldn’t just give me the best deal, I had to be proactive and ask for it…  This is why I’m happier with my Amazon Fire TV.  I have my hardware, and now I just need to keep the internet running.  I don’t have call every 3 months because my bill is too high.  I just get to enjoy what I watch…  and Playstation Vue is actively making the service better.  I haven’t noticed that same for AT&T.  They aren’t adding new features, they aren’t improving their UI.  They just continue charging me for the same old tired service.

I suggest you take a look at internet TV.  If you have questions, feel free to ask.  I’ve played with a bunch of stuff and really like it.  My wife is getting there… but it’s different.  But I”m happy that the internet providers (Playstation, Sling, etc…) are improving to be competitive.  I’m finally in a place where the providers will improve to keep me.  Not just assume I’ll stay because of lack of options.  And more importantly, learn from AT&T’s customer service.  Always compete for your customers.

Thanks for reading,

Coach.Me – a new tool to help make and keep habits

My buddy Justin turned me onto Tim Ferris’ podcast.  It’s funny, because I read his book, the 4 hour workweek, a long time ago, and totally forgot.  Well, Tim’s podcast is pretty interesting.  Well, one of the things he does is talk about cool new apps or sites.  One of those that he talked about is called Coach.Me.  This cool little app lets you pick a habit your skill you want to work on.  The options are limitless that you can pick or create your own.  Then you can say how often you want to do it, do you want reminders, etc…

For example, I just started doing it this week, and I added exercise, learn German & speed reading.  Well, it’s pretty cool, and works great for someone like me.  I’m highly driven by lists, so having this list with reminders helps me to stay on track and finish it.  Now, obviously, it’s easier when I’m on the road and don’t have the normal home responsibilities, but regardless, it’s a great way to help build some good habits, or recreate habits you are losing 🙂  Check it out.

Thanks for reading,

Defining the Persona – Helping guide to what you really need

A week or two ago, I started taking an online class about app development for SAP.  Naturally, much of it is centered around Hana Cloud, Hana, and the Web IDE, but I was pleasantly surprised it includes some really good design ideas.  One of those I wanted to talk about today.  They are calling it the persona, but in general, this is defining who will use the app.  More importantly it covers a lot of different pieces about who will use the app.

To properly define the Persona, you need the following pieces of information:

First, try to refine your initial idea for your Fiori app, and always keep in the back of your mind these two questions:

  • “What am I trying to accomplish with this app?”
  • “Can I explain clearly the context and need for this app in two minutes or with just a few paragraphs?”

Write out the story behind your app and try to keep it to three paragraphs or less, definitely less than one page of text. Make sure your story includes specifics about segmentation, targeting, and positioning:

  • Segmentation: Identify which industries or group of customers this app could be for
  • Targeting: What industry or group of customers will this app serve specifically
  • Positioning: How will this app be optimized to appeal to the target chosen

Next, you want to define the exact person that will be using the app.

  • Name – get it down to a specific person if possible, at the least, get it down to a specific job title.
  • Background – really get down to the details of the person.  What degree of education?  family?  Work experience?
  • Job Title/Role
  • Job Responsibilities – be as detailed as possible
  • Main Goals – for the app, and even in general
  • Needs – what do they really want to accomplish?  what information/functionality will allow them to do it?
  • Pain Points – what really makes life challenging at work?
  • Stakeholders – Who can help make this happen?
  • Competencies:  rank each of the following from 1 – 5
    • Casual User
    • Proactive
    • Work in Team
    • Global Focus
    • Innovative

The goal of this exercise to get true in-site into the person you are designing this application for.  The better you can understand the user, the easier it will be to design an application the user will use 🙂

In addition, if you are interested in the class, check it out below.  So far, it’s worth the time.  Thanks for reading,
https://open.sap.com/courses/fiux2

Leveraging your existing investment in ERP

I recently did a blog post talking about the different types of customers.  I think that conversation is very relevant when talking about capital investments in your ERP software.  Just to recap, the 4 major categories of customers include:  (see my previous post for more details).

  1. The early adopters
  2. The “middle” adopters
  3.  The late adopters
  4. The never adopters.

ERP customers are no different.  There will be new customers and they will naturally fall into group 1 (at least for the initial purchase), but if you look at the SAP customer base, there are a LOT of customers out there that currently have some form of an existing SAP product.  Not every customer has a need or the budget to immediately upgrade to the latest and greatest products (HANA, Cloud for Customer, even CRM, etc).  Often customers will be years behind the curve on implementing new products.  And when they do upgrade, how can you tell if you are getting your money’s worth?  Let’s say you spend $500,000 in licensing, hardware and implementation/testing cost.  You now have the latest support pack.  Can you see areas of your business that suddenly run more efficiently?  Can you see performance improvements that allow your employees to enter data faster, solve customer issues faster, or get things out the door faster?  Often there are licensing/support costs associated with older revision, or there is specific functionality that has been recently released that your business really needs.  Every organization needs to ask itself if upgrading the ERP system has the ROI to justify the capital expense.

At JaveLLin Solutions, we are here to support the customers that have no need, no interest or no budget to upgrade, but still want to improve their day to day processes.  Our goal is to help those customers leverage their existing investment.  Rather than spending $100,000 ~ $1,000,000 or more to “hopefully” see dramatic gains in their business. Shouldn’t your business focus on the problem areas that can be easily fixed.  By focusing on specific areas, you can really tell if you are getting your ROI.

Our goal at JaveLLin Solutions is to understand your issues in service management.  We work with you to develop a solution based on applications, configuration and best practice processes to simplify service in your ECC system.  Our experience is your key to a well-oiled service machine.

Thanks for reading,

Setting Sales Order Line Item to TECO upon Service Order Teco

Here is one of the latest things I learned about Service.  Once the service order is completed, typically to perform the financial transactions like RA or Settlement, the sales order Line item needs to be set to TECO (technically complete).  This has always been a manual step for me, so when I recently discovered this could be automated without any code, well I had to document it for myself 🙂

I always thought this was something that had to be done using custom code.  After a lot of digging, I found this can be done using pure configuration.  Please note, this is a global setting.  Because this is changing system status code, you can’t get fancy have it only apply to certain service order types or certain organizations.  This is one of those all or nothing pieces.  Regardless, this is still a good thing to know.

Go to Transaction: BS32.

Enter in SysSt = SDRR ( Rep.conf. from service order) which is a fancy way of saying the service order was TECO’d

Drill into this and find status I0045 (TECO) and change the value to set.

It’s that easy.

Thanks for reading,

Using the system Trace ST05 and ST01

Recently, one of my colleagues reminded me of a nice little trick.  Typically, it’s more of a last resort, but typically much less painful than the debug method.  The Trace functionality found in transaction ST05  which allows you to trace by user or ST01 which can trace through the whole system (not user specific).

The process is pretty simple.  Go to ST05 (I encourage you start here, as there will be less to filter through if multiple people are on the system).

Select the trace type:

  • SQL Trace (selected by default)
  • enqueue trace
  • RFC trace
  • Buffer trace
  • HTTP trace

if it’s a limited amount of data and you aren’t sure, select them all.  Otherwise, the SQL trace is usually sufficient.

Press Activate Trace

in a separate window, execute the transaction you want to check.

Press Deactivate Trace.

Press Display Trace.

Execute with the default settings.

Now you’ll have a nice ALV grid.  Typically it is easiest to search for a specific program or a specific table to zero in on what you want to see.

Thanks Todd, I completely forgot about this.

Thanks for reading,

Customer Types

One of the things I have recently realized is that companies will always be building better and better products, but that doesn’t mean that everyone is going to use them.  Take myself for example.  I bought a license of a product called Snagit probably 6 or more years ago.  Every time I open it, it tells me that there is a new version.  Just go pay $25 and it’s mine with all the new features.  The problem is that I don’t need any new features.  Everything delivered in the old version meets my needs.  Now, on the other hand, I have friends that every time a new Apple product is released, he need to have it right away even if he doesn’t need it.  This brought me back to something I heard a while ago (and happily it stuck).  There are different types of customers.  I might be getting this wrong, but I think it’s broken into 4 different groups.

  1. The early adopters – they need the latest and greatest.  ALWAYS.  end of story. They aren’t afraid of dealing with bugs or glitches in exchange for the latest version
  2. 2nd Wave.  They aren’t on the bleeding edge of technology, but are willing to buy into the new stuff once it’s proven and stable.  this could be weeks, months or even years, depending on the customer.
  3.  The late adopters – these are the customers that are happy with what they have, but will eventually move to something newer, but typically they will always be multiple releases behind the new stuff and often need a push (like it will no longer be supported or something similar).  They want things proven and they want to know the money they spend will give them something beyond what they already have.
  4. The never adopters.  These are the people that have what they want and unless it breaks or stop working will never upgrade or buy a new version.  Even if it breaks, they may go looking for ways to fix it, or buy the same older version because it met their needs and they feel comfortable with the version.  Change is painful for theses guys.

Now, it all depends on what you are selling.  Because any one person can be all 4 of these customers, depending on the product.  For example, myself, I still love new, fast laptops and usually buy a new one every 18-24 months (even though I don’t need it),  but I still have my same DLP TV that I bought over 10 ago in my media room and have no plans to replace it until it dies.  I replace my iphone every 2-3 years or until it no longer runs.  I just recently converted my DVD’s to be digital (but I don’t have a VCR in the house 🙂 ), and I still appreciate old School SAP ECC.  So as you can see, I’m all over the board depending on the product/technology.

You job as a marketer is to figure out your product, and where people fit into the mix.  And more importantly, make sure that at least one of these customer groups is willing to buy what your offering.

Thanks for reading,

UI5 – Transitioning from Local to Cloud

Now, silly me, I really thought once I developed something, had it working, that I’d be able to just copy and paste and “alakazam”, it would work.  I really should know better than that by now, but hey, wishful thinking :).  So, here’s what happened.  I did all of my development in eclipse, ran it off the local server, used a simple proxy servlet, and everything worked great… well except that no one else could see it unless I showed them on my machine.  So I started digging.  A good friend of mine told me to check out the Hana Cloud Platform.  They have free versions.  So I did… and I’m really glad that I did.  However, like everything, the design of my app wouldn’t work in the cloud.

First I tried just adding HCP to my eclipse platform…  no love.  No matter how hard I tried, it wouldn’t work (granted, if I used my current version, it might now).  So, I tried just creating a template app in the SAP Web IDE, then copying my code into there…  nothing but errors.  After trying lots of other little attempts, I faced reality and started with a clean slate from the Web IDE.  I was able to salvage a lot of my original code, but of course, I had to add it in piece by piece, and often rewrite or move pieces of code within other functions.

When it was all said and done, I ended up with a better product (because I got to leverage new SAP standard functionality like the cloud connector, the Web IDE, and routing features that I’m only now beginning to understand 🙂

Stay tuned.  I’m finalizing my first round of testing, then I’ll send it out and hope to get your feedback on it,

Thanks for reading,

UI5 – Dynamically creating fields in a list

For you UI5 experts, I’m sure this is old hat.  But to me, this was pretty damn cool.  One of the biggest challenges I never got with the iOS applications was being able to dynamically read my configuration tables and display only what I wanted to see.  Now don’t get me wrong, I’m sure it was possible, but I wasn’t willing to spend the extra money for the feature when I didn’t have much of a customer base.  When you do things yourself, you have the luxury of wasting more time to figure it out instead of paying a higher price tag 🙂

Anyway, I had a list of fields in a particular sequence, so I created a service in the gateway to return all the visible fields in the correct sequence.  The next step was to read it into my application.  Now I wanted to also store this locally, so the code includes some additional features to read in the local data first, and if it isn’t available, then call the service.  (I apologize for the format, cut and paste doesn’t work so well in a blog, but you’ll get the idea).

// first, I get the model either from storage or

var oConfig = new sap.ui.model.json.JSONModel();
jQuery.sap.require(“jquery.sap.storage”);
//Check if there is data in the Storage
var urlCon = “Config”;
var oStorage = jQuery.sap.storage(jQuery.sap.storage.Type.local);
if (oStorage.get(“cfgData”)) {
var oDataConfig = oStorage.get(“cfgData”);
oConfig.setData(oDataConfig);

// once I have the data, I check to make sure there is something in there to avoid errors, so I check for undefined or blank
// if it’s initial or blank, I read the service to populate it.
if (typeof oConfig.getProperty(“/results/0/Field”) === “undefined” ||
oConfig.getProperty(“/results/0/Field”) === null){
oStorage.remove(“cfgData”);
oModel.read(urlCon, null, null, false, function(oData, oResponse) {
oConfig.setData(oData);
}, null);
}
} else {
oModel.read(urlCon, null, null, false, function(oData, oResponse) {
oConfig.setData(oData);
}, null);
}

// after all the checking and reading, I put the results into storage and into my model for the app
var oDataConfig = oConfig.getData();
oConfig.refresh(true);
oStorage.put(“cfgData”, oDataConfig);
this.setModel(oConfig, “config”);

Now I had a json model that holds all my config values.  (I include an option to refresh configuration within the app, but in general, this doesn’t change often enough, so why read it more than you have to).

Next up, I added a function to populate all the fields (for me they were going into a list on an icontab

// start by reading in the model and checking it has some data

var oModel = this.getView().getModel(“config”).getProperty(“/results”);
if (oModel.length > 0) {
var field = sap.ui.getCore().byId(“SelFields”);

// next, check to see if the list within the tab exists, if not, create it and the associated pieces
if (typeof field === “undefined” || field === null) {
var oLayout = new sap.ui.layout.Grid(“SelFields”);
var oLayout2 = new sap.ui.layout.Grid(“SelDateFields”);

// finally, look through the model.  for me, I’m checking for certain types of fields to determine if they belong on this tab
// also to determine if they are input fields, or just display
for(var i = 0; i < oModel.length; i++) {
if (oModel[i].GWField !== “”) {
if (oModel[i].Grpnam === “OM01”){
oLayout.addContent(new sap.m.Label({text:oModel[i].Descr}));
oLayout.addContent(new sap.m.Input({
maxLength: 20,
id: oModel[i].Field,
value: oModel[i].Value
})
);
}
if (oModel[i].Grpnam === “OM02”){
oLayout2.addContent(new sap.m.Label({text:oModel[i].Descr}));
oLayout2.addContent(new sap.m.Input({
maxLength: 20,
id: oModel[i].Field,
value: oModel[i].Value
})
);
}
}
}
// //Attach the panel to the page
var selGrid = this.getView().byId(“SelTab”);
oLayout.placeAt(selGrid);
var selDateGrid = this.getView().byId(“SelDateTab”);
oLayout2.placeAt(selDateGrid);
}

// finally, fill the new fields with values (notice it is outside the big if statement checking if they exist
// either way, this look will always run

var val;
for(var j = 0; j < oModel.length; j++) {
if (oModel[j].Grpnam === “OM01” || oModel[j].Grpnam === “OM02”) {
val = oModel[j].Value;
if(val !== “”) {
sap.ui.getCore().byId(oModel[j].Field).setValue(val);
}
}
}
}

 

Hope this helps and thanks for reading,

Posts navigation

1 2 3 24 25 26 27 28 29 30 97 98 99
Scroll to top