Today will see how to terminate the worker using x++ code. For this user will create the CSV file and he will upload the file while running the batch.
Dialog:
Code :
class TerminationBatch extends RunBaseBatch { Filename ItemFileName; Filename filename; DialogField dialogFilename; dialog dialog; #define.CurrentVersion(1) #define.Version1(1) #localmacro.CurrentList fileName #endmacro client server static ClassDescription description() { return 'Terminate multiple workers'; } protected boolean canRunInNewSession() { return false; } public Object dialog() { DialogGroup dialogGroup; FormBuildControl formBuildControl; FileUploadBuild dialogFileUpload; // Set enumSet = new Set(Types::Enum); dialog = super(); dialogGroup = dialog.addGroup('File picker'); formBuildControl = dialog.formBuildDesign().control(dialogGroup.name()); dialogFileUpload = formBuildControl.addControlEx(classstr(FileUpload), filename); dialogFileUpload.style(FileUploadStyle::MinimalWithFilename); dialogFileUpload.baseFileUploadStrategyClassName(classstr(FileUploadTemporaryStorageStrategy)); dialogFileUpload.fileTypesAccepted('.csv'); dialogFileUpload.fileNameLabel('Select worker data file'); return dialog; } static void main(Args _args) { TerminationBatch objClass = new TerminationBatch(); if (objClass.prompt()) { objClass.runOperation(); } } public void run() { #File container currentLine; CommaTextStreamIo localStream; str textFile; FromTime timeConsumedStartTime; ToTime timeConsumedEndTime; int timeConsumedInMin; HcmPersonnelNumberId hcmPersonnelNumberId; HcmWorker hcmWorker; boolean ret = true; HcmReasonCodeRecId reasonCodeRecId; HcmReasonCodeId reasonCodeId; TransDate lastDate, terminationDate; TimeOfDay toTime; HcmEmploymentLastWorkedDateTime localLastDayWorked; HcmEmploymentTransitionDateTime localTerminationDate; HcmEmploymentLastWorkedDateTime localRetirementDate; int i; FileUpload fileUploadControl = this.getFormControl(dialog, filename); FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult(); if (fileUploadResult != null && fileUploadResult.getUploadStatus()) { textFile = fileUploadResult.getDownloadUrl(); } localStream = CommaTextStreamIo::constructForRead(File::UseFileFromURL(textFile)); if (localStream.status() != IO_Status::Ok) { throw error(strfmt('Is not possible to open the file. Error %1',enum2str(localStream.status()))); } localStream.inFieldDelimiter(','); while (localStream.status() == IO_Status::Ok) { currentLine = localStream.read(); if (!currentLine) { break; } try { timeConsumedStartTime = timeNow(); // timeConsumedStartTime = DateTimeUtil::getUserPreferredTimeZone(); hcmPersonnelNumberId = conPeek(currentLine, 1); lastDate = conPeek(currentLine, 2); terminationDate = conPeek(currentLine, 3); reasonCodeId = conPeek(currentLine, 4); toTime = str2time('23:59:59'); localLastDayWorked = DateTimeUtil::newDateTime(lastDate, toTime); localTerminationDate = DateTimeUtil::newDateTime(terminationDate, toTime); hcmWorker = HcmWorker::findByPersonnelNumber(hcmPersonnelNumberId); reasonCodeRecId = HcmReasonCode::findByReasonCode(reasonCodeId).RecId; ret = HcmWorkerTransition::newTerminateHcmWorker(hcmWorker.RecId, localTerminationDate, localRetirementDate, reasonCodeRecId, localLastDayWorked, false); if (ret) { i++; } timeConsumedEndTime = timeNow(); // timeConsumedEndTime = DateTimeUtil::getUserPreferredTimeZone(); timeConsumedInMin = str2int(Global::timeConsumed(timeConsumedStartTime, timeConsumedEndTime)); } catch (Exception::Error) { Throw (Exception::Error); } } info(strFmt('Successfully terminated workers: %1', i)); info(strFmt('It took %1 minutes to update the records', timeConsumedInMin / 60)); } protected FormControl getFormControl(DialogRunbase dialog, str controlName) { return dialog.formRun().control(_dialog.formRun().controlId( controlName)); } }
Keep Daxing!!
No comments:
Post a Comment