Thursday, 22 February 2024
How to create a TLV QR Code ?
Tuesday, 19 December 2023
Peoplecode to get primitive , collection ,compound
Below is the Peoplecode to get the response message
Local Message &Request_MSG = CreateMessage(Operation.X_ATTENDANCE_REQUEST_POST, %IntBroker_Request);
Local Message &Response_MSG = CreateMessage(Operation.X_ATTENDANCE_REQUEST_POST, %IntBroker_Response);
Local Message &MSG;
Local boolean &ret;
Local Document &reqDocument, &respDocument;
/*------------------------------------------*/
Local Collection &dataCollection, &dataCollection1;
Local Compound &dataCompound, &respCompound, &respCompound1, &userCompound;
/*-------------------------------------------*/
&Request_MSG.IBInfo.ConnectorOverride = True;
&Request_MSG.URIResourceIndex = 1;
&docMsg = &Request_MSG.GetDocument();
&msg_comp_tmpl = &docMsg.DocumentElement;
&msg_comp_tmpl.GetPropertyByName("accountId").value = X_ATTENDANCE_T0.X_ACCOUNT_ID.Value;
&msg_comp_tmpl.GetPropertyByName("dateFrom").value = DateTimeValue(X_ATTENDANCE_T0.RQSTDTTM.Value);
&msg_comp_tmpl.GetPropertyByName("dateTo").value = DateTimeValue(X_ATTENDANCE_T0.RUNDTTM.Value);
X_ATTENDANCE_T0.DESCRLONG.Value = "";
Local Message &mResp = %IntBroker.SyncRequest(&Request_MSG);
Local array of string &KeyValuePairs = CreateArrayRept("", 0);
Local JsonArray &DataArray, &userArray;
Local JsonObject &userObj, &accessGateObj;
Local integer &transactionTypeID, &resultStatus;
Local datetime &createDate;
Local Rowset &Datagrid_rs;
If &mResp.ResponseStatus = 0 Then
&content = &mResp.GetContentString();
&parser = CreateJsonParser();
&ret = &parser.parse(&content);
Local JsonObject &jsonRoot = &parser.GetRootObject();
For &i = 1 To &jsonRoot.GetChildCount();
&propertyName = &jsonRoot.GetPropertyNameAt(&i);
Local string &propName = &jsonRoot.GetPropertyNameAt(&i);
Local any &propValue = &jsonRoot.GetProperty(&propName);
Evaluate &propertyName
When = "status";
&status = &jsonRoot.GetProperty(&propertyName) ;
When = "message";
&message = &jsonRoot.GetProperty(&propertyName);
When = "data";
&DataArray = &jsonRoot.GetProperty(&propertyName);
For &i = 1 To &DataArray.Size;
Local JsonObject &jsObj = &DataArray.GetJsonObject(&i);
/* if a user property exist */
If &jsObj.IsExist("user") And
Not &jsObj.IsNullProperty("user") Then
&userObj = &jsObj.GetJsonObject("user");
&firstName = &userObj.GetProperty("firstName");
&lastName = &userObj.GetProperty("lastName");
&userName = &userObj.GetProperty("userName");
&jobNumber = &userObj.GetProperty("jobNumber");
rem MessageBox(0, "", 0, 0, "&firstName -" | &firstName | " &lastName - " | &lastName);
End-If;
/* if a accessGate property exist */
If &jsObj.IsExist("accessGate") And
Not &jsObj.IsNullProperty("accessGate") Then
&accessGateObj = &jsObj.GetJsonObject("accessGate");
&nameAr = &accessGateObj.GetProperty("nameAr");
&nameEn = &accessGateObj.GetProperty("nameEn");
&beaconId = &accessGateObj.GetProperty("beaconId");
rem MessageBox(0, "", 0, 0, "accessGate");
End-If;
If &jsObj.IsExist("transactionTypeID") And
Not &jsObj.IsNullProperty("transactionTypeID") Then
&transactionTypeID = &jsObj.GetProperty("transactionTypeID");
End-If;
If &jsObj.IsExist("createDate") And
Not &jsObj.IsNullProperty("createDate") Then
&createDate = &jsObj.GetProperty("createDate");
End-If;
If &jsObj.IsExist("resultStatus") And
Not &jsObj.IsNullProperty("resultStatus") Then
&resultStatus = &jsObj.GetProperty("resultStatus");
End-If;
If &jsObj.IsExist("localTimeZone") And
Not &jsObj.IsNullProperty("localTimeZone") Then
&localTimeZone = &jsObj.GetProperty("localTimeZone");
End-If;
If &jsObj.IsExist("departmentName") And
Not &jsObj.IsNullProperty("departmentName") Then
&departmentName = &jsObj.GetProperty("departmentName");
End-If;
End-For;
End-Evaluate;
End-For;
End-If;
Sunday, 10 December 2023
PeopleSoft REST GET Web Service
Representational State Transfer (REST) is a style of doing Web services that is becoming increasingly popular among web developers because of its simplicity over SOAP and other methods.
1. Build the Template Document
Documents represent a hierarchical data structure like a Rowset object. They have a logical and physical representation in XML, HTML and JSON . A document object that will capture all the parameters that may be sent inbound to your web service.
In this simple example, we will only have one parameter.
now build a message object based on the document template we built above.
PeopleTools > Integration Broker > Integration Setup > Messages
2. Build the Document & Message for Response
3. Create a REST Service
3. Create a Service Operation
3. Create a Service Operation Handler
import PS_PT:Integration:IRequestHandler;
Class GET_STD_DATA implements PS_PT:Integration:IRequestHandler
method OnRequest(&msgRequest As Message) Returns Message;
method OnError(&pRequestMsg As Message) Returns string;
end-class;
method OnRequest
/+ &msgRequest as Message +/
/+ Returns Message +/
/+ Extends/implements PS_PT:Integration:IRequestHandler.OnRequest +/
Local Message &response, &request;
Local string &parm1, &parm2, &SecurityKey, &StdID, &L_OPERPSWDSALT1, &FindHash;
Local string &OEMPLID, &ONAME_DISPLAY, &OSEX, &OCAMPUS_ID, &OACAD_CAREER, &OACAD_PROG, &OPROG_STATUS, &OPROG_REASON, &OADMIT_TERM, &OEXP_GRAD_TERM, &OACAD_PLAN, &ODegree, &OMajor, &OACAD_YEAR, &OYRDESCR, &ODESCRSHORT, &OEFFDT;
Local string &resultSalt = "123";
Local string &resultSalt1 = "456";
Local string &resultSalt2 = "789";
Local Compound &com;
&response = CreateMessage(@("Operation." | &msgRequest.OperationName), %IntBroker_Response);
Local Document &reqDOC, &respDOC;
/*---------------------- Request Message -------------------------*/
&reqDOC = &msgRequest.GetURIDocument();
&com = &reqDOC.DocumentElement;
&SecurityKey = &com.GetPropertyByName("MYID").value;
/*--------------- Response Message ------------------------------*/
SQLExec(SQL.L_GET_ID_FROM_TRANSTEXT, &SecurityKey, &StdID);
SQLExec("select L_OPERPSWDSALT1 from PS_L_TRNS_PWD1 where OPERPSWDSALT =:1", HashWithSalt(&SecurityKey, &resultSalt), &L_OPERPSWDSALT1);
SQLExec("select 'Y' FROM PS_L_TRNS_PWD2 WHERE L_OPERPSWDSALT2 =:1", HashWithSalt(HashWithSalt(&SecurityKey, &resultSalt) | &L_OPERPSWDSALT1, &resultSalt2), &FindHash);
If Not None(&StdID) And
(&FindHash = "Y") Then
SQLExec(SQL.L_STD_ACADEMIC_DTL_SQL, &StdID, &OEMPLID, &ONAME_DISPLAY, &OSEX, &OCAMPUS_ID, &OACAD_CAREER, &OACAD_PROG, &OPROG_STATUS, &OPROG_REASON, &OADMIT_TERM, &OEXP_GRAD_TERM, &OACAD_PLAN, &ODegree, &OMajor, &OACAD_YEAR, &OYRDESCR, &ODESCRSHORT, &OEFFDT);
End-If;
&respDOC = &response.GetDocument();
&respDOC.GetElement("EMPLID").VALUE = &OEMPLID;
&respDOC.GetElement("CAMPUS_ID").VALUE = &OCAMPUS_ID;
&respDOC.GetElement("DISPLAY_NAME").VALUE = &ONAME_DISPLAY;
&respDOC.GetElement("ACAD_PLAN").VALUE = &OACAD_PLAN;
&respDOC.GetElement("PLAN_DESCR").VALUE = &OMajor;
&respDOC.GetElement("ACAD_PROG").VALUE = &OACAD_PROG;
&respDOC.GetElement("PROG_DESCR").VALUE = &ODegree;
&respDOC.GetElement("YEAR_ADMITTED").VALUE = &OYRDESCR;
&respDOC.GetElement("YEAR_GRADUATED").VALUE = &ODESCRSHORT;
&respDOC.GetElement("ACAD_CAREER").VALUE = &OACAD_CAREER;
&respDOC.GetElement("PROG_STATUS").VALUE = &OPROG_STATUS;
&respDOC.GetElement("PROG_REASON").VALUE = &OPROG_REASON;
&respDOC.GetElement("ADMIT_TERM").VALUE = &OADMIT_TERM;
&respDOC.GetElement("EXP_GRAD_TERM").VALUE = &OEXP_GRAD_TERM;
&respDOC.GetElement("SEX").VALUE = &OSEX;
Return &response;
end-method;
method OnError
/+ &pRequestMsg as Message +/
/+ Returns String +/
/+ Extends/implements PS_PT:Integration:IRequestHandler.OnError +/
Return "Error Occured";
end-method;
Check it Using POSTMAN
Wednesday, 6 December 2023
PeopleCode to Generate Alpha Numeric Random String
Function GenerateUniqueKey() Returns string
Local string &characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Local string &key = "";
Local number &length = 12; /* Adjust the desired length of the key */
For &i = 1 To &length
&randomCharacter = Substring(&characters, Int(Rand() * 62), 1);
If (&i = 5 Or
&i = 9) Then
&key = &key | "-";
End-If;
&key = &key | &randomCharacter;
End-For;
Return &key;
End-Function;
Tuesday, 5 December 2023
Component Interface - Inserting a New Item into a Collection
Assume you have a collection on the Component Interface and you want to insert a new row into the collection.
This would be the equivalent of hitting the ‘+’ button on an online page (Scroll area).
To insert a new row to the collection one can use the InserItem method. one need to specify the index (row number in rowset) while using the method.
&myItem = &Collection.InsertItem(1);
Below is the code for inserting rows in the Transcript Text component in PeopleSoft Campus Solution.
Global File &fileLog;
Global string &FileName;
Global string &PROCESS_INSTANCE;
Global string &RUN_CNTL_ID;
Local ApiObject &oSession, &oLTscrptTextCi;
Local ApiObject &oPersnlFerpaVwCollection, &oPersnlFerpaVw;
Local ApiObject &oSrvcIndSelVwCollection, &oSrvcIndSelVw;
Local ApiObject &oStdntCareerCollection, &oStdntCareer;
Local ApiObject &oTscrptTextLocCollection, &oTscrptTextLoc;
Local ApiObject &oTscrptTextCollection, &oTscrptText;
Function errorHandler()
Local ApiObject &oPSMessageCollection, &oPSMessage;
Local number &i;
Local string &sErrMsgSetNum, &sErrMsgNum, &sErrMsgText, &sErrType;
&oPSMessageCollection = &oSession.PSMessages;
For &i = 1 To &oPSMessageCollection.Count
&oPSMessage = &oPSMessageCollection.Item(&i);
&sErrMsgSetNum = &oPSMessage.MessageSetNumber;
&sErrMsgNum = &oPSMessage.MessageNumber;
&sErrMsgText = &oPSMessage.Text;
End-For;
rem ** Delete the Messages from the collection **;
&oPSMessageCollection.DeleteAll();
End-Function;
&FileName = "DOCKEY_GENERATION_PRCS_LOG" | ".TXT";
&fileLog = GetFile(&FileName, "W");
try
rem ** Set the Log File **;
&fileLog = GetFile("C:\Users\MUHAMM~1\AppData\Local\Temp\L_TSCRPT_TEXT_CI.log", "w", "a", %FilePath_Absolute);
rem &fileLog.WriteLine("Begin");
rem ** Get current PeopleSoft Session **;
&oSession = %Session;
rem ** Set the PeopleSoft Session Error Message Mode **;
rem ** 0 - None **;
rem ** 1 - PSMessage Collection only (default) **;
rem ** 2 - Message Box only **;
rem ** 3 - Both collection and message box **;
&oSession.PSMessagesMode = 1;
rem ** Get the Component Interface **;
&oLTscrptTextCi = &oSession.GetCompIntfc(CompIntfc.L_TSCRPT_TEXT_CI);
If &oLTscrptTextCi = Null Then
errorHandler();
throw CreateException(0, 0, "GetCompIntfc failed");
End-If;
rem ** Set the Component Interface Mode **;
&oLTscrptTextCi.InteractiveMode = True;
&oLTscrptTextCi.GetHistoryItems = True;
&oLTscrptTextCi.EditHistoryItems = True;
rem ** Set Component Interface Get/Create Keys **;
&oLTscrptTextCi.EMPLID = "20260";
&oLTscrptTextCi.ACAD_CAREER = "UGDS";
&oLTscrptTextCi.STDNT_CAR_NBR = 0;
rem ** Execute Get **;
If Not &oLTscrptTextCi.Get() Then
rem ** No rows exist for the specified keys.**;
errorHandler();
throw CreateException(0, 0, "Get failed");
End-If;
rem ** Begin: Get/Set Component Interface Properties **;
rem ** Set/Get STDNT_CAREER Collection Field Properties -- Parent: PS_ROOT Collection **;
&oStdntCareerCollection = &oLTscrptTextCi.STDNT_CAREER;
Local integer &i126;
rem For &i126 = 1 To &oStdntCareerCollection.Count;
rem &oStdntCareer = &oStdntCareerCollection.Item(&i126);
&oStdntCareer = &oStdntCareerCollection.Item(1);
rem ** Set TSCRPT_TEXT_LOC Collection Field Properties -- Parent: STDNT_CAREER Collection **;
&oTscrptTextLocCollection = &oStdntCareer.TSCRPT_TEXT_LOC;
rem Local integer &i228;
rem For &i228 = 1 To &oTscrptTextLocCollection.Count;
&oTscrptTextLoc = &oTscrptTextLocCollection.Item(1);
&oTscrptTextLoc = &oTscrptTextLocCollection.InsertItem(1);
rem &oTscrptTextLoc.PRINT_LOC_SEQ = [*];
&oTscrptTextLoc.RELATIVE_POSITION = "K";
&oTscrptTextLoc.PRINT_LOC = "K";
&oTscrptTextLoc.INSTITUTION = "LUMS";
rem &oTscrptTextLoc.STRM = [*];
rem &oTscrptTextLoc.STDNT_DEGR = [*];
rem &oTscrptTextLoc.MILESTONE_NBR = [*];
rem &oTscrptTextLoc.MODEL_NBR = [*];
rem &oTscrptTextLoc.EXT_ORG_ID = [*];
rem &oTscrptTextLoc.EXT_DEGREE_NBR = [*];
rem ** Set TSCRPT_TEXT Collection Field Properties -- Parent: TSCRPT_TEXT_LOC Collection **;
&oTscrptTextCollection = &oTscrptTextLoc.TSCRPT_TEXT;
rem Local integer &i339;
rem For &i339 = 1 To &oTscrptTextCollection.Count;
&oTscrptText = &oTscrptTextCollection.Item(1);
&oTscrptText = &oTscrptTextCollection.InsertItem(1);
REM &oTscrptText.TEXT_SEQ_NBR = [*];
&oTscrptText.TRANSCRIPT_LEVEL = "00"; /* Never Print */
rem &oTscrptText.TSCRPT_TYPE = [*];
&oTscrptText.SSR_TRANSCRIPT_TXT = "My Transcript Text";
rem &oTscrptText.TSCRPT_TYPE2 = "OUGDS";
rem End-For;
rem End-For;
rem End-For;
rem ** End: Get/Set Component Interface Properties **;
rem ** Execute Save **;
If Not &oLTscrptTextCi.Save() Then;
errorHandler();
throw CreateException(0, 0, "Save failed");
End-If;
rem ** Execute Cancel **;
rem If Not &oLTscrptTextCi.Cancel() Then;
rem errorHandler();
rem throw CreateException(0, 0, "Cancel failed");
rem End-If;
catch Exception &ex
rem Handle the exception;
MessageBox(0, "", 0, 0, "" | &ex.ToString());end-try;
rem &fileLog.WriteLine("End");
&fileLog.Close();
Thursday, 14 September 2023
Peoplecode to get HEX values
Function hexVal(&iH As integer) Returns string
If &iH <= 9 Then
Return String(&iH);
Else
Return String(Char(Mod(&iH, 9) + 64));
End-If;
End-Function;
Function toHex(&iV As integer) Returns string
Local integer &iH = Mod(&iV, 16);
Local string &sResult = "";
If &iV - &iH = 0 Then
&sResult = hexVal(&iH);
Else
&sResult = toHex(Int((&iV - &iH) / 16)) | hexVal(&iH);
End-If;
Return &sResult;
End-Function;
&sHexValue = hexVal(Code("A"));
Wednesday, 18 January 2023
Instr & Substr functions in RTF
The substr function allows you to extract a substring from a string. The syntax for the substr function is:
substr(string, start_position, length)
string is the source string.
start_position is the position for extraction. The first position in the string is always 1.
length is the number of characters to extract
<?xdofx:substr('128.000',5,1)?>
output = 0
The instr function returns the location of a substring in a string. The syntax for the instr function is:
instr(string1,string2,[start_position],[nth_appearance])
string1 is the string to search.
string2 is the substring to search for in string1.
start_position is the position in string1 where the search will start. The first position in the string is 1. If the start_position is negative, the function counts back start_position number of characters from the end of string1 and then searches towards the beginning of string1.
nth appearance is the nth appearance of string2.
<?xdofx:Instr('128.000','.',1)?>
output = 4
Here is an example to use substr and instr function together
Suppose SSR_TOT_EN_TKNGPA = '128.000'
<?xdofx:substr(SSR_TOT_EN_TKNGPA,Instr(SSR_TOT_EN_TKNGPA,'.',1) + 1,1)?>
output = 0