Can an ACE report execute from within an I4GL Form? - informix

I would like to add a "Print-Ticket" command to the ring menu in my I4GL Form so that when my users hit the escape key to update a transaction row they can select the "Print-Ticket" command from the ring menu to print the current row being displayed with an ace report, without exiting the form. I would also like this print capability for any queried transaction row whether it has been updated or not. Can this be done with I4GL forms?

Yes
The action block for 'COMMAND "Print-Ticket"' can invoke a function which drives an I4GL report (or, indeed, it can execute an ACE report via the RUN statement). In theory, you could write the body of the function that drives the report in the action block, but that would be a diabolical way of abusing the language; it is much better to use a function. If you give the function an argument identifying the ticket to be printed, it just needs to be invoked with the correct ticket number - it does not matter whether to the I4GL function whether it has been updated or not.

Related

Skip "Capture Page Screenshot" for some keywords

I'm writing test cases in Robot Framework using AppiumLibrary.
I'm importing AppiumLibrary with the following code to get a screenshot whenever something goes wrong:
AppiumLibrary.__init__(self, run_on_failure="Capture Page Screenshot")
Is there a way to NOT take a screenshot for a specific keyword? This keyword will for example create 15 screenshots (if it's not able to find Donald):
Wait Until Keyword Succeeds 30 seconds 2 seconds Element Text Should Be Username Donald
There is nothing built-in to do what you want. There are many solutions, however.
One solution would be to turn off capturing the keyword (using register keyword to run on failure) immediately before calling wait until keyword succeeds. You could then call wait until keyword succeeds, and then turn capturing back on afterwards.
Or, you can register your own custom keyword instead of Capture page screenshot. Your own keyword can use whatever logic it wants to determine whether to capture screenshots or not. For example, it could look for a global variable that tells it whether to capture or not.
You could also write your own keyword to use in place of wait until keyword succeeds which also uses one of the other two solutions.
For example, create a keyword named wait until element contains text which turns off the capturing, runs wait until keyword succeeds, and then turns it back on. Then, in your test you still just have a single statement:
wait until element contains text Username Donald
Register Keyword To Run On Failure NONE
${Status} Run Keyword And Return Status Wait Until Keyword Succeeds 30 seconds 2 seconds Element Text Should Be Username Donald
Register Keyword To Run On Failure Capture Page Screenshot
IF ${Status}==False
Element Text Should Be Username Donald
END
-Lets Walkthrough whats happening in the above code snippet
Register Keyword To Run On Failure NONE (To avoid multiple
screenshots when Element Text Should Be keyword fails in the
next line )
After waiting for 30 seconds it will return status If the keyword passes it returns pass and if it fails it returns fails and gets stored in status variable (Remember no screenshots are generated in this process since we turned off screenshots in point 1.)
Again setting back Capture Page Screenshot Keyword on Failure to take screenshot.
Lastly one more time it will run Element Text Should Be and if it fails it generates a screenshot and keyword fails.(Since ${Status}==False that means it will run only if Wait Until Keyword Succeeds keyword fails otherwise this IF block will not run since our keyword already passed)

CICS Subprograms

I have a requirement that states to have a Menu Screen containing 10 options and user can select a option and jump to appropriate screen.I have created a Trans-ID for Menu Screen.Do i need to create Trans-ID for all the 10 options?.I have searched for this type of Requirement and all of them involves creating the Trans-ID for each sub screen so that the screen can be refreshed and return to same screen until user selects to go back to main-screen.
I am new to CICS-COBOL Programming and not sure why we need to create Trans-ID for each screen.Is this the global format or is there any other approach available?
No, you don't need to use a tranid per screen/function in this scenario. You could actually use one transid and even one program in a pseudoconversational style.
You would use a commarea to hold the state of the interaction with the user at the terminal, so when the user picks an option and the next 'leg' of the pseudoconversation invokes the transaction and program again, you can determine in that program what has just been received from the terminal, what to do with it and what response to send back to the terminal. This process simply repeats until the business function completes and you can end with the default menu again.

How do you print different templates in netsuite?

I am trying to find the correct template and id to use for a hotprint of an advanced pdf template of an Item Fulfillment.
The hot print url is (with the id bolded) https://system.na3.netsuite.com/app/accounting/print/hotprint.nl?regular=T&sethotprinter=T&id=7600&label=Packing%20Slip&printtype=packingslip&trantype=itemship&orgtrantype=TrnfrOrd&auxtrans=7605
For some reason only certain id=# seems to affect the outcome and the ids I have got to work for two different templates don't match the Custom Transaction Forms ID or the Advanced pdf script id. (example most ids=template 1, while 168,4954, and seemingly random other ids=template 2) I am very confused on how netsuite resolves the hot print url as it normally doesn't include the template= part though I have seen others use it for invoice print urls.
The parameters at the end of the url (the stuff after the ?) are used by Netsuite to control settings used by the webpage which prints the PDFs for you.
In this case, &id=##### refers to the internal id of the document you are printing. You can see this by going to the document, right clicking, selecting inspect, and typing nlapiGetRecordId() into the console. When you click Print, you should see that same number after &id=#####.
&template=### refers to the template you are printing. If you go to Customization -> Forms -> Advanced PDF/HTML Templates, you'll notice a Script ID field in the table. If you substitute the correct Script ID in for the number in &template=###, you'll notice you generate the same PDF. This Script ID acts the same as the number that was previously there.
The reason you're seeing unusual results when you change those numbers is because you're mismatching a record with a template not built for it. So it won't print exactly right, but will sometimes execute anyways.
Anyways, this sort of parameter scheme is a similar scheme to how Suitelets and Restlets work, so in the future, you might experience this sort of thing again.
EDIT: For those reading this in the future, please read the comments.
To customize a packing slip and return form:
If you are printing packing slips and need some customization, you can use a custom invoice form when printing packing slips. For example, you can customize an invoice form to hide the fulfilled item tax rate and amount, and the order total. Then, when you print the packing slip using the custom form through mass print, choose the the packing slip shows the customized information.

access a watch item even if not debugging step by step in the Delphi IDE

Is it possible to see the list of watches with the realtime value when I am not at a breakpoint?
I have defined an integer Mycounter in the public section of a TDatamodule.
I add it to the Watch list.
I can see its value being updated in the watch list only as I am debugging line by line or I am at a rbeakpoint.
Is there a way to keep seeing its value in the watch list even when the control goes back to the VCL thread (=when I press F9)?
As David said, a watch is not possible but you could get close by adding a data breakpoint to your variable and have it dump it's value to the Event Log each time it changes.
Steps
Get the address of the variable you like to track.
Add a databreakpoint
Open the Event Log debugging window
Get the address of a variable
I have used the variable I in my example. As per your example, this should be #Mycounter
Adding the Data Breakpoint
Use the address of the variable
Uncheck the Break checkbox
Evaluate the expression PInteger($45622C)^
Log the result
Viewing the results
There is no way to do this from the IDE. Watch evaluation requires all the threads in the process to be suspended so that the debugger can read the memory and perform the evaluation.
If you want to see values being refreshed without the debugger breaking, you would most likely have to add code to your application to instrument the values of interest. For example, add code to your application output debug messages (e.g. OutputDebugString(), CodeSite etc.) whenever the value changed. You would of course need to view the information in a separate viewer.

In transaction NACE, is it possible to find out the print program and form routine, if i know the name of the Smartform?

I want to find out the name of the Print Program, and the name of the subroutine (form) that prints my SmartForm.
Now luckily in NACE (Conditions for Output Control), one can "kinna" figure out the application and the output type by oneself, and then the print program is obviously written there.
So what about if one wouldn't know what application and Output Type, and would have to check all applicatios and output types manually? isn't there an easier way to do this?
The table TNAPR contains some print program -> script links, search for your smartform name in field SFORM. This is by no means an exhaustive list, however.
OR
Do a "where used" search for "SSF_FUNCTION_MODULE_NAME", which will give you a list of all smartform calling programs. You'd still need to go through it manually, but you might find a suitably matching program description or similar.
If you need to find out the actual printing program for a certain form and it is possible to get a print preview, you can always enter the debugger using /h and examine the call stack.

Resources