Thursday, 20 November 2008

email from 812

Generally I edit the AN8 that is associated with the P0092 record for the user.

Goto row, who's who

Choose email

Add the email information and you might start getting emails.

Your enterprise server must have an SMTP server in the [JDEMAIL] section. Note also that you might have to put a proper email address within that stanza, or your SMTP server may not permit relay.

"telnet SMTPSERVERNAME 25" to test if that is up and running.

You can goto gh902 and choose employee mailboxes and then row exit for email preference for the user that you want to change too.

Monday, 17 November 2008

Script that'll restart your listeners

Above the wmIS service is restarted, then I give the listener a poke with the following script. Remember that you need to create the EnableFinancialRTEListener service in the webMethods developer.

url="http://nsgshsjdnwb01u:5555/invoke/services/EnableFinancialRTEListener"
Set objHTTP = CreateObject("MSXML2.XMLHTTP.3.0")
Call objHTTP.Open("GET", url, FALSE)
wscript.sleep 1000
objHTTP.Send

Friday, 14 November 2008

WSG - Starting a listener with a script

I thought this would be simple... Is that crazy of me... surely there would be a simple script that would take a couple of arguements like package or adapter or listener and you pass is -start or -stop... Bobs your uncle, Fanny your aunt (I said aunt) things would be starting or stopping...

No chance...

You need to use the development tool, to create a flow and start this through the web browser.

Ahhhh...

So, I create a new package through webmethods ddeveloper, new folder "Services" and new flow called "EnableFinancialRTEListener"

Within this, choose -> (insert) browse and then use the following:

2. Call "WmART::pub::art::connection" and select enableConnection for all the adapter services
3. Type input value "connection:E1_GuaranteedEvents" for connectionAlias.
4. Call "WmART::pub::art::listener" and select enableListener for the listener.
5. Type input value "Listeners:NotificationEnterpriseOne" for the listenerName
6. Run this flow from the developer and make sure it works.
7. Run the following from a web browser

You then save this to the integration server.

Once saved, you can call the service with the following URL:
http://servername:5555/invoke/services/EnableFinancialRTEListener

It then prompts you for a username and password, I need to work that one out... But it does start your service.

I'll post again when I work out the username and password issue.

The last part was easy, I changed the execute ACL to be anonymous and then it could be run by just going to the URL. next is to execute the URL through a VBS script.

Thursday, 13 November 2008

UTC Calendar popup wrong date

All the users were getting an error where the incorrect date was in the calendar popup until 11:00am, funny thing was, this is when GMT would click over to the next day. We found that in the user profile P0092 we had to give them a UTC of 16, then all of the popups worked. Crazy hey. Users had been dealing with this for about 8 months, but enough it enough... Fair enough!

I used the following SQL to make things quicker:

update sy812.f00921 set ULUTCTIME = '16' where ULUTCTIME = ' '

That's it for now.

Manifest - shite-fest

The manifest at one of my clients is all wrong. The full package thinks one thing, the web server another - what always occurs is that the web server clears it's serialised objects - thanks for that - awesome!

There are some calls in the KG about if the pacakge is built in the afternoon, the date time stamps will be wrong between manifests (12 hours out) and this will cause the clearing of serialised objects - nice one JDE.

Am I able to insert documents in my blog? I might try to insert it as a image?? Nope that does not work. you can get this half decent document from the metalink3 site.

The manifest is stored in the F98770 table, it is also stored in the F989999 table with particular formats (which I'm attempting to find).

Ahh, found the fu*ker

select wbuid, wboid from py812.f989999 where wboid like '%MANI%' ;

WBUID WBOID
-------------------- --------------------------------------------------
DEFAULT MANIFEST-MANIFEST

So, I wonder what this looks like in databrowser.

You gotta guess the contents...

When you do a generate-manifest from the java generator, it reads the MANIFEST-MANIFEST record from the F989999 that you are currently looking at.

When you generate a manifest, the code works out the latest full package and then selects from the F98770 table for that package, ie:

SELECT SMERBLOB FROM dbo.F98770PY812FH WHERE ((SMFMAT = ? ))

Then does:
Entering createSOManifest. Pathcode = PY812; specManifest = SpecManifest, type PACKAGE; audit track = Audit: user = JDE, host = nsgshsjdnwb01u, port = 6014, Timestamp = Thu Nov 13 13:46:19 EST 200

Then it deletes the manifest record from the F989999 and replaces it with the record from the F98770.

DELETE FROM CRPDTA.F989999 WHERE ((WBUID = ? AND WBOID = ? ))
INSERT INTO CRPDTA.F989999(WBJPO,WBUID,WBOID,WBLNGPREF) VALUES (?,?,?,?)

The thing is, this does not write any of the updates.

It gets the correct build and deploy dates, but none of the updates that are in the F98770.

???WTF???

So it seems that you can nick a manifest from another package, by getting the MANIFEST-MANIFEST record - but it's tough to get all of the correct stuff from the F98770 into the F989999 to stop your serialized objects being truncated all of the time... Damn those BLOBS!

I read somewhere that if you generate any object with the WebDevelopment=FALSE set, the MANIFEST would be set straight... Lets test this.

Note also that the manifest has FU&# all to do with the package that you are doing the generation from, which is SHIT. It just reads the currently deployed package and writes that to the manifest. You gotta make sure that you deploy your package before you generate your manifest, otherwise you'll be in sh#tsville.

So, I logging into the generator with WebDevelopment=FALSE (you cannot see the manifest option, cool). Generated the R0010P and went back in to check the manifest. Note that wen you have WebDevelopment=FALSE, you get the standard JDE splash screen and login, not the little popup.

That fixes it!!! It actually writes the proper manifest record with all of the update packages.

I really don't know about this, I'll need to have a good think about it. What I do know is that it's crap.

Tuesday, 11 November 2008

UBE security - must read!

I love problems. I'm honestly not too sure whether I like solutions as much as problems... Solutions are creative, there are many ways to solve a problem - yet the problem itself is quite 1 dimensional.

We had an issue where a report launched another report. The subsequent report stopped running... The user only had 1 role, there was no security for the user, just the role. There was no environment overrides for the user, just the one role that the user had. Security had not changed in weeks. The job stopped running...

Come on, have a think about it? Got a reason? Got a solution?

Well, as it happens the following SQL is run by the UBE:
SELECT * FROM SY812.F00926 WHERE ( AUSEQNO = 50.000000 )

This is subsequent to a bunch of other jobs, but at the end of the day this statement is run. After this statement the select on the F986101 is run, using some of the results from the previous query... Problem is that our system had a couple of roles (one old and not used before) at the same status as the real role.

This was being picked up and used in the query of security! Wow. I'm going to work out if there should be a unique index on the F00926 with AUSEQNO??

Crazy problem. I guess this means that all of the security on the server could be dodgey for this reason! I don't really want to delete all of the old roles out of this table, in case all jobs stop working because security has finally kicked in. this could happen! Remember that the web server will stop all of the one off jobs from being launched, but it's only jobs in a calling chain that would get "done in" by this.

Simple information about auditing

Remember in JDE auditing, the following is used:

The base table (say F0911) is converted to a view of the same name.
The data from the base table is copied to a table called F0911_ADT. (insert into select * from)
Triggers are installed on the F9011_ADT to write audit records to the A0911.

All of the existing indexes are built against the ADT table - but they are all rebuilt!!! This takes a long time for a big table.

Wednesday, 5 November 2008

New trigger for job queue substitution...

Damn that queue kernel coming in after the UBE kernel and updating all of the fields that I update in the "AFTER INSERT" trigger... Do you know what I mean?? My trigger used to update the QUEUE name after the insert from the UBE kernel (insert into the F986110 - Duh?). Anyways so some message must be passed between the queue kernel and the UBE kernel, because the queue kernel just comes in and splats over the top of what my trigger changes... Dirty bastard. Here is the new improved trigger text:

CREATE OR REPLACE TRIGGER JobQueueSubstitution
BEFORE UPDATE
ON SVM812.F986110 FOR EACH ROW
DECLARE
chgFlag NUMBER ;
BEGIN
IF ltrim(rtrim(:new.jcjobque)) = 'QBATCH' and ltrim(rtrim(:new.jcjobsts)) = 'S' and ltrim(rtrim(:old.jcjobsts)) = 'W' THEN
SELECT COUNT(*) INTO chgFlag
FROM F0005
WHERE drsy = '55'
AND drrt = 'JQ'
AND ltrim(rtrim(drky)) = ltrim(rtrim(:NEW.JCUSER)) ;
IF chgFlag > 0 THEN
:new.JCJOBQUE := 'Q812';
END IF;
END IF;
END JobQueueSubstitution;

Extending JDE to generative AI