Artwork for podcast The JDE Connection
Ep 121 Ope, I still need to customize, now what
Episode 12115th September 2026 • The JDE Connection • Chandra Wobschall and Paul Houtkooper
00:00:00 00:36:49

Share Episode

Shownotes

In this episode, Chandra and Paul discuss the realities of software customization within JD Edwards environments. They emphasize that while extensibility tools have reduced the need for customizations, some remain necessary for business-specific requirements. The hosts lay out best practices and key dos and don’ts for customizing software, such as following naming conventions, avoiding modifications to base objects and indices, and using customer-reserved system codes. They warn against common pitfalls that can harm performance or data integrity and suggest always adhering to published development standards.

03:52 What’s more important at INFOCUS than Paul’s hair?

09:21 Customizations are a reality

11:58 Object customization best practices

14:03 Adhere to JDE naming standards

15:33 Maintaining data integrity

18:25 Do I need a custom table for a custom application?

21:44 Design for performance when customizing

23:57 Let’s talk about the Don’t Do’s

32:26 Midwesternism of the Day

Resources:

JD Edwards EnterpriseOne System Extensibility Guidelines: https://www.oracle.com/webfolder/technetwork/tutorials/jdedwards/Tools/system_extensibility_guidelines/system-extensibility-guide.pdf

Development Guidelines for Application Design Guide: https://docs.oracle.com/en/applications/jd-edwards/development-tools/9.2.x/eotds/index.html

Form Design Aid Guide: https://docs.oracle.com/en/applications/jd-edwards/development-tools/9.2.x/eotfd/index.html

Event Rules Guide: https://docs.oracle.com/en/applications/jd-edwards/development-tools/9.2.x/eotev/index.html

Development Standards for Business Function Programming Guide: https://docs.oracle.com/en/applications/jd-edwards/development-tools/9.2.x/eotds/index.html

Transcripts

Speaker:

Quest Oracle Community proudly presents The

Speaker:

JDE Connection, a Quest on-air podcast

Speaker:

production. This podcast explores and showcases how JDE

Speaker:

customers are harnessing specific functionality and capabilities to

Speaker:

drive business success. This

Speaker:

episode is brought to you by RST Solutions,

Speaker:

accelerating digital transformation with AI-driven

Speaker:

business efficiency. Hello, JDE Connection

Speaker:

listeners. Welcome back. I'm Chandra Wobschall, one of

Speaker:

your podcast hosts, and I'm the Business Solutions Lead

Speaker:

at Colossus IS Support. Back with me this week,

Speaker:

and maybe this week I'll move you to most weeks, is

Speaker:

my friend— Hi. And podcast partner, Paul Houtkooper,

Speaker:

Vice President of JD Edwards Product Development at Oracle.

Speaker:

Hey, Paul. Hey, Chandra. Hello, everybody. How's it

Speaker:

going? Boy, you sound excited today. What?

Speaker:

Geez. Hey, Chandra, pick it up a notch.

Speaker:

Let's go. Pick it up a notch? Okay. Hey, did you know we need new

Speaker:

poker chips? These were, uh, 10,000 downloads. We're at

Speaker:

25. Oh, 25,000 downloads? That's

Speaker:

awesome. No, just, just 25.

Speaker:

Today, you mean? Today.

Speaker:

25,000. Yes, we did hit 25,000. So now

Speaker:

when we give these out, we'll have to give people 2 and a half. Should

Speaker:

I bring like the little hacksaw? Little hacksaw.

Speaker:

That's right. Yeah. I'm not flying, so technically I could, I could just drive

Speaker:

in with my hacksaw. All right. Well, with the way inflation is going on, you

Speaker:

probably need to give them like 5 of them or whatever. I don't know. Yeah,

Speaker:

it's 50 in there, about 50 cents. Yeah, about 50 cents on the dollar. So

Speaker:

there you go. All right. There you go. Oh, I love it. That's

Speaker:

awesome. We're a week out from Enfocus. All right. I suppose we

Speaker:

better figure out what the heck it is we're going to say, what it is

Speaker:

we're going to do, not only from our podcast, but from the team perspective.

Speaker:

So pressure is now really on. So yay. Yeah,

Speaker:

I know I've got a couple, obviously I should probably figure out what I'm gonna

Speaker:

talk about for the financial SIG meeting and obviously

Speaker:

what we're going to talk about. So. I'll get there. We

Speaker:

always do. I know. And of course, we got the fun factor this

Speaker:

year. I think Wes brought in Blockbuster. Remember Blockbuster where you'd

Speaker:

go Friday nights, get your video, get some popcorn,

Speaker:

get your soda? My VHF tape, which some people may not know what

Speaker:

those are. VHF, VHS, whatever it was.

Speaker:

VHS. VHS, not VHS. You're right. You were going down the

Speaker:

VFW, so you just can buy them. You went to the VFW to watch

Speaker:

your VHS. See how that works?

Speaker:

Now you got me going. I got you going too. Sweet. Awesome.

Speaker:

What the youngins out there say is, well, the fact that you guys are talking

Speaker:

about it means you belong in the— anyway. Yeah, right.

Speaker:

Yeah, that should be fun. I'm excited. I'll have to think of a character and

Speaker:

show up in some sort of costume. I guess I should get on that. I

Speaker:

guess I could make it my twofer. It could be my Halloween costume too, since

Speaker:

that's in like a month and a half. Yeah. I'll get on that.

Speaker:

So we may as well get into this week's topic, I suppose. Do you mind?

Speaker:

Or did you have an update that you wanted to provide for everybody? I

Speaker:

do. Oh, you do? We have something really

Speaker:

fun that's going to happen at InFocus besides the party.

Speaker:

I knew I should have moved straight to the topic. You should have. You didn't

Speaker:

move fast enough. You gave me an opportunity. And guess what?

Speaker:

I'm going to take it. Um, all right, so I'll

Speaker:

unmute now while you do what you need to do. Catch you guys in

Speaker:

a little bit. So I think I alluded to it earlier at the

Speaker:

end of one of our podcasts where we were going to talk about what was

Speaker:

really important to add in Focus. It has been a topic I

Speaker:

think that as long as I've known you,

Speaker:

I've heard talked about in the community, and that is your

Speaker:

hair. Yeah, I know, I know. I

Speaker:

don't personally— I don't get it. I think it fits you. I think it's

Speaker:

you, but it is a contentious topic. It's, you know,

Speaker:

yeah, it's a heated debate, whatever. It's a heated debate. I've

Speaker:

noticed there are some strong opinions that you need to cut that.

Speaker:

Yeah, that ponytail. I am. Yeah, I'm sure you're more aware than

Speaker:

that. It's not just in the community, it's in my family.

Speaker:

Family too. Yeah. So yeah. Well, we had

Speaker:

originally talked about doing this as like an auction and

Speaker:

fundraiser for a charity, but there's a lot of

Speaker:

regulations involved with that, I've learned. So

Speaker:

instead, what we're gonna do is we are going to have a

Speaker:

mechanism for people to vote on whether you should

Speaker:

cut it or keep it. So kind of like Love It or List It for

Speaker:

those that might watch HGTV type stuff. Either

Speaker:

cut it or keep it. And so this will be available to

Speaker:

attendees at InFocus only. So if you're not going, well,

Speaker:

you better get signed up so you can cast a vote. I don't

Speaker:

think anybody's coming to InFocus just for this. Thanks. You

Speaker:

never know. But anyway, so we will have that option. We

Speaker:

will still encourage a donation. The charity that we're going

Speaker:

to point people towards is called Wigs for Kids. And that is

Speaker:

where my hair actually will go, not

Speaker:

just Monetary contribution, but my, my physical hair. I will

Speaker:

be donating it after In Focus, and we will

Speaker:

record said haircut as well. And for

Speaker:

yours, we may or may not be able to do said

Speaker:

cut at our live podcast episode.

Speaker:

However, we will announce if it is a cut

Speaker:

it or keep it. And then from there, we'll either, if

Speaker:

we are able to do it there, we will allow

Speaker:

Hopefully one of the people that voted is in attendance and

Speaker:

is selected and could cut your hair, or

Speaker:

we will go to an appropriate hair establishment

Speaker:

and record and publish it after the fact. So

Speaker:

there will be video evidence so people can see it.

Speaker:

When you say select somebody, are we going to like hand out a raffle ticket

Speaker:

or something like that to be able to do some sort of sweepstakes and somebody

Speaker:

gets to be the lucky person or what? Still working

Speaker:

out that level of detail, but I do know in order to vote, you will

Speaker:

be required to provide an email address. So we might be able to

Speaker:

do it through that as well. So we'll figure out a way. We're working on

Speaker:

that last minute detail. So that is the plan. So for

Speaker:

those that want to see Paul without the ponytail,

Speaker:

you can vote that way. I think it's— or they want to see Paul lose

Speaker:

the ponytail. Great. Yeah. If you're fine with the ponytail and

Speaker:

whatnot, you can vote to keep it. And regardless, we're going to have

Speaker:

some chopping going on because you are going to chop your hair and donate

Speaker:

that. So that's going to go to a good cause. And maybe through doing this,

Speaker:

we're able to actually raise some money for a good charity as

Speaker:

well in the process. Exactly. So I'll just have to

Speaker:

make sure that some certain family members have access to

Speaker:

The voting tool so they get to cast their vote as well. And

Speaker:

I'm guessing you can only vote once, otherwise I'll be out there with

Speaker:

my vote blocking everybody. You just go in a bunch of times. I

Speaker:

think you'll be limited since you have to provide your email address. You'll be limited

Speaker:

to one vote. We won't have somebody going in there every second of the day

Speaker:

to vote yes, yes, yes, or no, no, no, whatever it might be.

Speaker:

Right. And this voting site will have some Pretty cool photos.

Speaker:

Some pretty epic photos, actually, if I do say so.

Speaker:

I'm so glad I was consulted in this,

Speaker:

obviously, as people can tell. Okay, fun. I can't wait

Speaker:

to see it. It's gonna be wonderful. I know. They always say

Speaker:

laugh at yourself before anybody else does. So. Exactly.

Speaker:

All right. I'd say we move on from that topic

Speaker:

and talk about something super fun.

Speaker:

Crickets. Super fun. Super fun. Um, actually.

Speaker:

Yeah. I mean, you and I were talking earlier this week about this topic and

Speaker:

it is an important topic. It's extensibility. And the reason

Speaker:

that this is coming up is I had a situation in

Speaker:

the last week or so where a customer

Speaker:

did customize. They had to customize. And it

Speaker:

reminded me that the reality is, is that No matter how much we

Speaker:

provide these extensibility tools, there's always going to be a use case out there

Speaker:

somewhere that requires some level of customization, or

Speaker:

maybe it's just easier. I don't know. There's a lot of different reasons, but customizing

Speaker:

the software is just a reality. And as we were

Speaker:

working through this situation with this customer, I was just reminded

Speaker:

that we used to have some guidelines out there that we tried to share with

Speaker:

folks to try to keep things in bounds, to try to—

Speaker:

protect your customizations as much as possible,

Speaker:

recognizing that most customizations, they create a level of

Speaker:

overhead and serve as almost blockers to your upgrade and

Speaker:

applying ESUs and stuff like that. But there are ways to do

Speaker:

customization. So customizations are a reality still.

Speaker:

So we should probably talk about what are some of the best

Speaker:

practices around doing those customizations that

Speaker:

help you reduce that TCO, that total cost of ownership,

Speaker:

lower risk. Right? Some people may not realize that there are

Speaker:

certain ways in which you could customize the software that actually puts you at

Speaker:

risk of object contention and other things. And then

Speaker:

if you are going to customize, one would argue that

Speaker:

you should apply the same standards that we do when it comes to

Speaker:

development. And those are a lot of different standards, whether it be

Speaker:

design standards or performance or naming, whatever we should.

Speaker:

be at least trying to adhere to similar

Speaker:

standards for consistency's sake. So anyway, so I thought

Speaker:

we would talk a little bit about the best practices around that,

Speaker:

because it is still a reality, but we don't talk about it as much

Speaker:

because of course we have all these other really cool ways in which to extend

Speaker:

the software, right? So we've spent all our time talking about those, and we've

Speaker:

kind of gotten away from the fact that, hey, guess what? People still

Speaker:

customize software. They don't just extend it. They don't just throw out a NUDO

Speaker:

here or there and accomplish what they need to accomplish. Sometimes they actually need to

Speaker:

make some changes that just aren't covered by a logic extension

Speaker:

or form extension or you name it.

Speaker:

Yes, I think it's true. And I know we've really kind of beat on the

Speaker:

drum and, I don't know, called it the dreaded C word, right? And

Speaker:

we've really beat on the modernization. And as part of that

Speaker:

path, decustomization comes into play, right?

Speaker:

But the reality is Most of us have a

Speaker:

business need or a requirement to have

Speaker:

some customization. There isn't a product that

Speaker:

will allow me to transact business the way my

Speaker:

business wants to transact business without this

Speaker:

customization. Maybe we can reduce some of what we have put

Speaker:

in over the years now with the quote unquote newer

Speaker:

tools that are available. But the reality is there's

Speaker:

probably still some level of customization. So

Speaker:

agree. I think this is a good thing to talk about. I mean, I think

Speaker:

we strive to eliminate the need. I mean, I think we should continue to strive

Speaker:

to eliminate the need and improve our ability

Speaker:

to extend without customization. That remains a goal and we

Speaker:

keep on getting closer and closer. But in the

Speaker:

meantime, while customization remains a reality, let's talk

Speaker:

about maybe some of the best practices. All right.

Speaker:

So I should modify all the base objects, right? That

Speaker:

is the number one thing that you can do. I don't know why

Speaker:

anybody doesn't do that. Like the easiest thing to do is to go into

Speaker:

P4210 or P42101 and just change

Speaker:

it to fit whatever it is that you want and you're good to go.

Speaker:

And then, well, I don't want to throw anybody under the bus, but I have

Speaker:

seen this of all things. And then what you do is, well, you

Speaker:

do that, you modify the base object in whatever release you're on. Let's say you're

Speaker:

on 8.11 or 8.11.1. SB1, you modify the base

Speaker:

object. And then what you do when you upgrade to 9.2, you know what you

Speaker:

do? Or 9.1, you know what you do? You transfer that

Speaker:

object. Oh. Yeah. And then you wonder why it doesn't work.

Speaker:

You call development and say you should make it work, but we won't go into

Speaker:

that. All right. I've got some scars. There's still some scar tissue.

Speaker:

Maybe some counseling has been involved. Who knows? But

Speaker:

anyway, but the cool thing is, is I've gotten to travel around the world

Speaker:

for Situations like that. All right, moving on. No, please

Speaker:

don't modify the core object, the base

Speaker:

object. I want to say, if you can avoid it, I want to say, geez,

Speaker:

I sure as heck hope these days you can avoid that. Modifying the

Speaker:

base object is a bad idea. Your stuff's just going to get

Speaker:

overwritten the next time you take an ESU. You put yourself directly into that

Speaker:

difficult spot. So in that sense, if you need to

Speaker:

change an existing object, then one of the main ways to do that then ends

Speaker:

up being cloning. At least clone it. Then you own it. You clone

Speaker:

it, you own it. I like it. You clone it, you own it, and you

Speaker:

can tweak it from there. And depending on the degree of changes that you take

Speaker:

or that you have, when you then take subsequent ESUs

Speaker:

and whatnot, you're either retrofitting what we did or you're

Speaker:

retrofitting what you did one way or the other, right? But you're not

Speaker:

putting your changes directly to the base object that are just going to get overwritten

Speaker:

by us the next time we take an ESU. Naming standards.

Speaker:

It might seem like a simple thing, or maybe an unimportant thing,

Speaker:

or an innocent thing, but naming standards matter.

Speaker:

Yeah. You want to make sure that you're adhering to

Speaker:

the naming standards that we prescribe so that you don't

Speaker:

have conflicts. And it's not just conflicts

Speaker:

within production, or it's not conflicts with us,

Speaker:

it's also conflicts across Your environments.

Speaker:

So yes, when you name a table, it should be F

Speaker:

followed by your system code. And as a

Speaker:

customer, I believe your system codes are whatever,

Speaker:

55 through 59. If you're not a customer, don't

Speaker:

use those system codes. I don't know who I'm supposed to tell that to. Maybe

Speaker:

it's a business partner. So, okay, business partners don't do that, but you're

Speaker:

probably doing it on the part of a customer. So chances are you are going

Speaker:

to use those system codes. So the only people I'm talking to, I guess, is

Speaker:

my own staff. Don't use 56. Anyway, I'm just kidding. We wouldn't.

Speaker:

But the point is 55 through 59 reserved for customers. So if you're

Speaker:

naming a table, it's F followed by your system code, followed by some

Speaker:

sort of sequential number of your file and whatnot.

Speaker:

So there are different naming standards for business views, table

Speaker:

conversions, processing options, templates for your

Speaker:

applications. If you're going to go create your own applications,

Speaker:

interactive apps, everything. And we do publish those. I believe in our

Speaker:

development standards documents. So please make a

Speaker:

point of adhering to those to avoid conflicts and avoid

Speaker:

contention. We've got all these wonderful ways to

Speaker:

do things, whether it be form extensions, logic extensions.

Speaker:

But if you are going to make a modification,

Speaker:

another way to extend is to use some of

Speaker:

the other design patterns that we have for like

Speaker:

localizations. Localizations allows you to do a bit

Speaker:

of plug and play. And there's advantages to that.

Speaker:

So look at those design standards and how we've done

Speaker:

things for localizations and see if that makes sense for how you

Speaker:

want your customization to behave. Other things,

Speaker:

create hooks into new functionality. Again, I look at this and I

Speaker:

was like, if you do have to add a call to a function or a

Speaker:

named var, put it at the end of an event. But I also look at

Speaker:

that and say, geez. A form extension should allow you to do these sorts of

Speaker:

things. And again, not everything's going to be handled through logic

Speaker:

extensions. So maybe you want to create a business function, maybe you want to create

Speaker:

an AMDR, maybe that's what you have to do for whatever reason.

Speaker:

But if you're going to hook it in, hook it in at the end and

Speaker:

make it easy. A few other things, insert, updates, deletes

Speaker:

to Oracle tables. If you're going to do that,

Speaker:

don't write your own. Don't do updates

Speaker:

directly from ER. In a

Speaker:

standard application that you cloned. In almost all of our

Speaker:

major system codes and A applications, we

Speaker:

have standard interfaces that are used to

Speaker:

update the tables, and that's to ensure data

Speaker:

integrity. And what you don't want to do

Speaker:

is start writing your own inserts,

Speaker:

updates, deletes. Whether it be from ER or

Speaker:

from other functions, you get potential contention. You

Speaker:

get potential problems with transaction

Speaker:

boundaries. We created what we called file servers

Speaker:

for a lot of our functions. X3111 is an example. There's

Speaker:

many others that you should be using those to do

Speaker:

your adds, your updates, your deletes to ensure that things are

Speaker:

consistent and adhered to. There's things like— Interoperability

Speaker:

and other things that we have to also make sure

Speaker:

that we retain integrity for and do consistently.

Speaker:

And so we want to funnel all updates to major tables

Speaker:

through those interfaces for consistency and data integrity

Speaker:

purposes. So it may not be obvious when you write your

Speaker:

little update as to how could this possibly be causing

Speaker:

problems, but we have transaction processing and we

Speaker:

have The ability to roll back things. And depending on

Speaker:

how we've written it and depending on how we've cached certain

Speaker:

information, you could be creating some

Speaker:

risk, risk of a data integrity problem. So question then,

Speaker:

if I create a custom application and that custom

Speaker:

application has fields on it that aren't in the

Speaker:

standard, let's say I'm customizing PO entry.

Speaker:

And I've got a bunch of stuff in my custom application

Speaker:

that I want in my purchasing table. Should I be

Speaker:

creating a 55, if that's, say, the system code I'm going to

Speaker:

use, a 55 table then and not use the

Speaker:

standard table? So it depends. As

Speaker:

always, there's never just a yes/no answer.

Speaker:

And again, it can get more complicated than this, but to try to keep it

Speaker:

simple and not eat up the entire 30 minutes on

Speaker:

one Question. One question. There are things like user reserve

Speaker:

fields as well as future use fields.

Speaker:

Yes. Okay. Very familiar with those. We use some of those.

Speaker:

Well, and you say you use some of them and I'd say, okay,

Speaker:

you can use the user reserve fields. You are the user, you are the

Speaker:

customer. You can use those. You should not use the future

Speaker:

reserve fields. Those are for me. Those are for my team. So

Speaker:

if there are available user reserve fields, that you

Speaker:

can use to represent the data attributes that

Speaker:

you wanna store. I mean, that's what they're there for. If

Speaker:

not, then yes, what you're creating after that, what we would call

Speaker:

a tag table, that is probably a

Speaker:

System55 table with the same

Speaker:

key structure as the base table, and it serves

Speaker:

as an extension, and you will be the one to write the logic

Speaker:

to update that table. Mm-hmm. But that's outside the confines

Speaker:

of probably the standard interface that writes to the base table.

Speaker:

Now, if you look at some of our tables, we've created our own

Speaker:

tag tables because we've had to do that for many

Speaker:

reasons. And those standard interfaces also control

Speaker:

the tag table, which is again— Tag table. Another good example of, well, if

Speaker:

you didn't go through the standard interface, all of a sudden you're adding records to

Speaker:

the base table without adding the corresponding records to the tag table

Speaker:

because you didn't know about the tag table, didn't think about the tag table.

Speaker:

In addition, all the records that you were adding to the base table were supposed

Speaker:

to also be getting put into the, say, the Z1

Speaker:

interoperability table, and you didn't write that. So now all of a sudden,

Speaker:

what are you doing, right? You're creating this data integrity nightmare where the tag

Speaker:

table is out of alignment with the base table and your

Speaker:

interoperability is missing records potentially. I mean, again, just an example,

Speaker:

not the best example perhaps, but an example. Yep. Thank

Speaker:

you. Yeah. What are some of the other tips? Man, I hate to say this

Speaker:

because I know we've got great partners out there and we've got development

Speaker:

teams at customers that are very sophisticated

Speaker:

and they do some amazing things. So I am not bringing these

Speaker:

things up to browbeat anybody or anything or—

Speaker:

Yeah. Throw anyone under the bus or anything. But of the

Speaker:

times that I got put on a plane to put on my Superman pajamas to

Speaker:

go fix somebody. I can tell you I boarded the plane more

Speaker:

times because somebody did

Speaker:

customize the software and didn't follow some

Speaker:

basic tips and tricks and best practices around performance.

Speaker:

Yep. And because they modified the base object, it

Speaker:

wasn't clear and obvious to the customer

Speaker:

themselves, whether it was their team or a

Speaker:

business partner that did it, doesn't matter. It was not obvious. So they're calling thinking

Speaker:

they have a problem with the base object, that it's not performing.

Speaker:

Which they do, but it's not really the based object at that point because it's

Speaker:

been customized and somebody's added a while loop

Speaker:

that is reading records and accumulating

Speaker:

values one by one, row by row

Speaker:

at the ER level because that's what they knew. So they got in there and

Speaker:

they said, oh, I need to go add up these values. And so they loop

Speaker:

through 1,000 sales order lines and they try to accumulate that value and they

Speaker:

do it through ER. And meanwhile, the application falls

Speaker:

asleep or whatnot. And I wish I was joking. I really do.

Speaker:

But I've found these loops. I've found infinite loops

Speaker:

written. Oh gosh. In ER to accumulate

Speaker:

values. I see people writing loops even in C, whether it be

Speaker:

ER or C, and not using our aggregation functions

Speaker:

that allow you in a single call to aggregate and group by

Speaker:

and do these things so that you can do a count, you can do a

Speaker:

sum, you can do those sorts of things. Much more efficiently, 'cause you're

Speaker:

actually using the database rather than this chatty

Speaker:

interface between your application or your business function and the table.

Speaker:

So all of that is related to what? It's related to performance. I ask

Speaker:

that if you do have to customize, please keep performance in mind.

Speaker:

Please. You should design for performance. And

Speaker:

there's a lot of documentation out there about dos and don'ts and whatnot.

Speaker:

And I just ask that people try their best to write

Speaker:

efficient logic. And we will do the same. Trust me. I'm not saying we're

Speaker:

flawless and that we don't make our own mistakes and that there's not our own

Speaker:

opportunities, especially in today's day and age with the tools that

Speaker:

you have available. Writing performant code gets a lot easier

Speaker:

now than perhaps it was before. Some restrictions. Let's just

Speaker:

rattle off some don'ts. So those were maybe some best practices.

Speaker:

Let's rattle off a few Please don't do this. I think we already

Speaker:

talked about system codes, right? 55 to 59, reserve that for

Speaker:

customers. Don't modify the

Speaker:

indexes of a table or the tables.

Speaker:

Which, this one was a little bit of news to me. Like,

Speaker:

I, I hear a lot about, and maybe I've not asked the questions

Speaker:

enough to say, did we just create our own

Speaker:

index or did we modify The base one,

Speaker:

because a lot of times maybe you're putting another field

Speaker:

in, you're using one of the user reference fields, and you're

Speaker:

populating that field with data that your business

Speaker:

inquires on a lot. So you want it to be indexed, right? Yep.

Speaker:

And I've never asked the question. I was

Speaker:

like, oh, I never thought about that. Oh, is that our own

Speaker:

index or did we modify the existing one?

Speaker:

Again, this is stuff that we have to adhere to internally as well, right? So

Speaker:

indexes get used all over the place. We have to be cognizant of where they

Speaker:

get used. And the problem with modifying the existing

Speaker:

index is you may be modifying it for your utilization within

Speaker:

one use case, but it's currently used in 100

Speaker:

different other places. And by doing what you just did, whether it's

Speaker:

changing the sort order or because of the way those

Speaker:

other usage instances access it, you

Speaker:

suddenly created a full table scan and you're creating performance

Speaker:

problems in those other places. Not that you intended to do that. You did something

Speaker:

that you thought was innocent, but it can cause problems. And we don't want to

Speaker:

get into, again, the way databases choose what index to use, this, that, and everything

Speaker:

else. There's some sophistication there as well, right? Mm-hmm.

Speaker:

But we open a table in code to use specific indexes,

Speaker:

and you have to be mindful of that. So if you decide you want a

Speaker:

new index for performance reasons, go create one. But if you

Speaker:

modify an existing one, again, you just run the risk. Same thing, you already asked

Speaker:

about tables. Don't modify the tables. That doesn't mean you can't use user reserve

Speaker:

fields, but don't go adding columns to a table. That's a big no-no.

Speaker:

Don't go modifying business views. Same sort of thing, right?

Speaker:

Right. They're used in multiple places, and unless you

Speaker:

know all those places and you understand the implications of that, even then,

Speaker:

unless you're going to own the ramifications to it, because as soon as you

Speaker:

change that business view, if I use that in 5 different applications, technically you just

Speaker:

customized 5 different applications. Oh gosh.

Speaker:

So yeah, again, it's just some dos and don'ts. Data dictionary items,

Speaker:

yeah, don't modify them with the exception of the glossary. Please

Speaker:

don't. Um, do you know how many times in

Speaker:

my career I have been asked to add more characters to a

Speaker:

field? Oh God. Yeah, I'm sure. I'm sure.

Speaker:

No, we can't do that. We are not modifying. No, no,

Speaker:

still no. Nope. It's

Speaker:

true. I get it. And I got to live by those same restrictions, right?

Speaker:

There's plenty of times when somebody says, geez, we want that field to be,

Speaker:

I don't know, 32 characters long. And we go, sorry, can't do that.

Speaker:

Right. Yeah. It's a very, is the word

Speaker:

invasive, intrusive, or both? All of the above.

Speaker:

Yes. Don't delete data items from data structures. What are

Speaker:

data structures? Well, there's processing options.

Speaker:

Don't delete a processing option value. No,

Speaker:

right? As you probably noticed, we have processing options out there that

Speaker:

have the word obsolete on them. Why? Because we don't delete them

Speaker:

either. Okay. It causes problems. Form data structures, report data

Speaker:

structures, business function data structures, which includes named ER data

Speaker:

structures. Don't delete. Bad idea.

Speaker:

Okay. Don't delete items from structures. Don't

Speaker:

write code around a new value in an existing processing

Speaker:

option. So maybe we're checking for 0, 1, 2, 3.

Speaker:

You decide, hey, let's do 4. You're running risk. Why?

Speaker:

Because what if I decide to do 4? Now what are you going to do?

Speaker:

Right. It's just, just, just, and I reserve the right.

Speaker:

To make those changes. And I lose. Absolutely. It's your software.

Speaker:

Unfortunately. Yeah. And we win, so to speak. So, we already said this one,

Speaker:

use user reserve fields if you're a customer, but not future

Speaker:

use fields because future use fields we put there.

Speaker:

Try not, I shouldn't say try not, I guess I'm just more

Speaker:

empathetic to the cost, but I say do

Speaker:

not use existing fields for another purpose. Right.

Speaker:

I don't know that I'm talking to customers right now, business partners right now. I

Speaker:

could be talking to my own development team right now. This is one of those

Speaker:

pet peeves that I have is somebody decided to

Speaker:

reuse an existing field for a purpose it was never intended.

Speaker:

And then we wonder why things break, because

Speaker:

nobody knew that all of a sudden we're going to put the 19th

Speaker:

character of the 32-character string when

Speaker:

it is X is now going to mean Whatever. No,

Speaker:

just no. Don't do it. Just don't do it. All right. Don't

Speaker:

override data dictionary items settings in an

Speaker:

application. Bad idea. If an app doesn't have the toolbar

Speaker:

up top, don't go into FDA and add it. There's a

Speaker:

reason it doesn't have it. Yes, exactly.

Speaker:

Maybe to kind of wrap, the base object, obviously we own.

Speaker:

If you copy a base object, which I would call cloning, right?

Speaker:

You own that. Yeah. Well, as soon as you clone it, like we said before,

Speaker:

you own it. So we'll own the base. And this is where many times

Speaker:

when you call into support with an issue with your

Speaker:

customized version, we ask if you could reproduce it in

Speaker:

the pristine version, which gets back to kind of managing your

Speaker:

customizations. One good thing to make sure that you have is a pristine copy

Speaker:

of everything that you can go back to, to try to reproduce.

Speaker:

Easier said than done. I 100% appreciate that. I

Speaker:

really do. I'm just putting it out there because it is best

Speaker:

practice, but that doesn't mean it's easy. It doesn't mean it gets adhered to all

Speaker:

the time. But in many of these instances, we find

Speaker:

ourselves going, all right, at least to establish a

Speaker:

baseline, can you go back to the preceding object and are you able

Speaker:

to replicate it? We ask that as if that's a simple thing,

Speaker:

and I recognize that it's not because it's likely a different

Speaker:

environment, it's likely different data, it's likely different volume,

Speaker:

it's likely different— I don't need to go on. I get it. It's

Speaker:

very, very difficult in those cases. But

Speaker:

regardless, if you clone it, you own it. I mean, that's

Speaker:

enough for this time around. I think so. You know, I mean, there's more, don't

Speaker:

get us wrong. Yeah, there's probably some more we could talk about and Maybe

Speaker:

we will. And maybe not. In the future. Well, you know, maybe I trip

Speaker:

some triggers and we're going to get some negative feedback and I'll

Speaker:

have to deal with that, but that's fine. Again, many of these are

Speaker:

best practices. Many of these are things that will get you in

Speaker:

difficult situations. I've seen almost, I

Speaker:

hate to admit it and maybe I shouldn't, but most of these I've seen violated.

Speaker:

Oh, 100%. You've been around. You've been with JDE a

Speaker:

long time, so I'm not shocked at that. Yep.

Speaker:

And many of the times when I've seen them violate it, I'm on site and

Speaker:

I'm pointing it out, and then I'm being educated

Speaker:

on why I'm wrong. And then I just remind them

Speaker:

that, then why am I here? Right. You brought

Speaker:

me here to solve your problem. Anyway,

Speaker:

enough on that. I don't know if that's helpful to folks. Or not, but

Speaker:

there are dos and don'ts and guidelines for customizing the

Speaker:

software still, because we can't get

Speaker:

100% away from it yet. Nope. Not quite there yet,

Speaker:

but I think this was a good overview. Hopefully, like you

Speaker:

said, it was helpful for our listeners. We know we have newer

Speaker:

folks that listen. I didn't even know there was actually published

Speaker:

guidelines, but I'm also not a developer. But

Speaker:

now that I know, it might be interesting to go find those and

Speaker:

maybe we can link to them in our show notes so that if people are

Speaker:

interested and want to make sure that their business is

Speaker:

following best practice, or as they're looking at maybe some of

Speaker:

their decustomizations, if there's an opportunity to

Speaker:

even bring this in, if maybe they haven't followed some best

Speaker:

practices. Agreed. Yeah. All right.

Speaker:

Well. Can't wrap up without one last item.

Speaker:

Oh yes. What is this week's

Speaker:

Midwesternism? This week's Midwesternism is

Speaker:

actually brought to you by a friend of yours that sent you a Facebook

Speaker:

video that was rather entertaining. But there were some things in said

Speaker:

video that I was like, oh my gosh, wow, I haven't said that in

Speaker:

a while. But yeah, funny as heck. And one of those was

Speaker:

Clicker. Ah, the old clicker. The old

Speaker:

clicker. Can you hand me the clicker? I want to change the

Speaker:

channel on the TV and I use a clicker to do that,

Speaker:

AKA a remote control. We have names for

Speaker:

everything. I know. I mean, it's like we can't call it by

Speaker:

whatever it is. Nope. Yeah. Like who thought the clicker and how

Speaker:

did that catch on? Quite frankly. It makes me laugh.

Speaker:

And I know I've said it. I think I retrained myself. I

Speaker:

probably got made fun of at some point in my life. And I retrained myself

Speaker:

to say, oh, can you hand me the remote? And so, hey, can you hand

Speaker:

me the clicker? Yep, absolutely. I mean, that's, that's probably the one

Speaker:

that everybody's used to is, hey, give me the remote. Yeah. I mean, I use

Speaker:

that for everything. But it's like, no, I want that clicker. And I'm not talking

Speaker:

about the PowerPoint thingamajig. Yeah, right.

Speaker:

So I can point to that specific bullet on my slide. I'm referring to

Speaker:

the remote control so I can change the channel. Which almost doesn't make any

Speaker:

sense anymore because most of them now have that little thumb thing that they

Speaker:

ripped off of Apple and there's not as much clicking involved. Clicking. Yeah,

Speaker:

there's definitely not. At least on certain

Speaker:

brands, I would say. Brands, for sure. Oh yeah, that's fair. Maybe certain

Speaker:

brands of televisions or whatever. So at least the ones

Speaker:

I'm most familiar with anyway. So, oh, the ones where you actually have

Speaker:

to walk up to and like turn the dial. Oh, 100%.

Speaker:

Yeah. Dang, man. And then you gotta get the rabbit ears just right. You might

Speaker:

even have to get some foil to put on the rabbit ears. And

Speaker:

then you gotta get it just right. You're dating yourself. And then you can't take

Speaker:

your hands off it. So then the problem is, is then you gotta get outta

Speaker:

the way of the TV, but you have to stand there and hold it so

Speaker:

that everybody can watch. Okay. Never mind. Yeah, dating yourself, just so you

Speaker:

know. Uh, yeah, yeah. Yes, but the first TV we had in my house

Speaker:

definitely did not have a clicker. I remember getting up to change the channel.

Speaker:

Yep. For my parents. For my parents. I think it—

Speaker:

right? Yes. Oh, those were the days. As they were sitting

Speaker:

on the— what is it, the Davenport? Well, that might be coming

Speaker:

in a future episode. Oh, my bad, my bad. Did I— You're jumping

Speaker:

ahead. I might have read ahead. My bad. Yeah, sorry.

Speaker:

Oh, oh, geez, you really messed

Speaker:

that one up now, didn't you? Geez Louise. Geez Louise.

Speaker:

All right, until next time, let's keep learning, sharing,

Speaker:

and most importantly, laughing together. Toodles! See

Speaker:

ya! Thank you for tuning in for today's episode of

Speaker:

The JDE Connection, a Quest On Podcast production.

Speaker:

Show notes and links can be found at

Speaker:

questoraclecommunity.org/jdeconnection.

Speaker:

To learn more about what's happening in the Quest JD Edwards community,

Speaker:

visit our website at questoraclecommunity.org/jdedwards.

Follow

Links

Chapters

Video

More from YouTube