Skip to content

Add smart-csv-org-loader example (Integration App) - #21

Open
jadiyeom wants to merge 1 commit into
Workday:mainfrom
jadiyeom:add-smart-csv-org-loader
Open

jadiyeom wants to merge 1 commit into
Workday:mainfrom
jadiyeom:add-smart-csv-org-loader

Conversation

@jadiyeom

Copy link
Copy Markdown

What this PR adds or changes

Adds examples/smart-csv-org-loader: an Extend app and async orchestration that loads organization assignment changes from a flat one-row-per-worker CSV, instead of multi-row Assign Organization EIB spreadsheets. It pre-validates workers, positions, dates and duplicates with WQL, calls Staffing Change_Organization_Assignments (v42.0) in the background, and writes each row's COMPLETED or SOAP_FAULT result back to a business object shown in Batch history.

Checklist for new or changed examples

  • The example lives entirely in its own folder under examples/
  • node scripts/validate-examples.mjs --check passes (valid example.json, README present, index table in sync)
  • The README says what the artifact is, how to use it, and what to change before deploying it (the "Before you deploy" section)
  • No credentials, tenant names, or real personal data anywhere in the folder
  • node scripts/audit-examples.mjs --changed passes (run with --skip-arcane; Arcane Auditor wasn't available locally)

Anything reviewers should know?

  • Tested end to end in a development tenant (Oct 2026), covering valid loads, SOAP faults surfaced per row, and a 47-row file in one async launch that finished in about a minute.
  • The orchestration is async (MixedFlow/MixedStart, modelled on catalog/orchestrationToolkit), because synchronous launches hit a ~24s timeout at about 15 rows.
  • Organization IDs aren't pre-checked with WQL (FROM organizations returned 400 in my tenant), so Workday validates them at load.
  • Not yet observed: an approval-routed change, or a successful custom organization assignment.

Copilot AI balanced review requested due to automatic review settings October 15, 2026 14:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example audit: 40 inline comment(s). The summary comment on this PR has the full list.

@@ -0,0 +1,22 @@
{

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PMDSecurityDomainRule (ACTION)

PMD page is missing required securityDomains list. All PMD pages must define at least one security domain (excludes microConclusion and error pages).

Why: Ensures PMD pages have at least one security domain defined (excludes microConclusion and error pages unless strict mode is enabled)

Read more

"authType": "sso",
"deferred": true,
"onSend": "<% self.data = {:}; self.data.query = pageVariables.orgQuery; self.data; %>",
"failOnStatusCodes": [

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EndpointFailOnStatusCodesRule (ACTION)

Inbound endpoint 'orgsWql' is missing required status codes: 400.

Why: Ensures endpoints have failOnStatusCodes with minimum required codes 400 and 403

Suggested change:

{"code": 400}

Read more

* Reference IDs never contain commas, so quoted cells are rejected with a clear message instead of parsed.
*/

var cell = function(cols, i) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'cell'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change
var cell = function(cols, i) {
let cell = function(cols, i) {

Read more

// string:split drops empty tokens, which would shift columns left when a cell is blank
// (e.g. a blank Company_ID would push Region_ID into the Company column). Wrapping every
// cell in '~' keeps each one non-empty; cell() strips the marker again.
var splitCells = function(line) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'splitCells'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change
var splitCells = function(line) {
let splitCells = function(line) {

Read more

// (e.g. a blank Company_ID would push Region_ID into the Company column). Wrapping every
// cell in '~' keeps each one non-empty; cell() strips the marker again.
var splitCells = function(line) {
return string:split('~' + line.replace('~', '').replace(',', '~,~') + '~', ',');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptStringConcatRule (ADVICE)

File section 'script' uses string concatenation with + operator in function 'splitCells': ''' + line.replace''''.replace','',' + '~''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!).

Why: Detects string concatenation with + operator - use PMD templates with backticks and {{ }} instead

Suggested change:

`~{{line.replace'~'''.replace',''~,~'}}~`

Read more

'hasQuotes': line.contains('"'),
'employeeId': cell(cols, 0), 'positionId': cell(cols, 1), 'effectiveDate': cell(cols, 2),
'costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),
'customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptMagicNumberRule (ADVICE)

File section 'script' contains magic number '5' in function 'parseCsv': ''customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))'. Consider using a named constant instead.

Why: Ensures scripts don't contain magic numbers (use named constants)

Read more

'employeeId': cell(cols, 0), 'positionId': cell(cols, 1), 'effectiveDate': cell(cols, 2),
'costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),
'customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptDescriptiveParameterRule (ADVICE)

Parameter 'c' in parseCsv (calls arrow_function()) in function 'parseCsv' should be more descriptive. Consider using a more descriptive name, such as 'param1' instead. Single-letter parameters make functions that take function parameters harder to read and debug.

Why: Ensures function parameters use descriptive names when functions take function parameters (except 'a', 'b' for sort)

Read more

'employeeId': cell(cols, 0), 'positionId': cell(cols, 1), 'effectiveDate': cell(cols, 2),
'costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),
'customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptMagicNumberRule (ADVICE)

File section 'script' contains magic number '6' in function 'parseCsv': '});'. Consider using a named constant instead.

Why: Ensures scripts don't contain magic numbers (use named constants)

Read more

'employeeId': cell(cols, 0), 'positionId': cell(cols, 1), 'effectiveDate': cell(cols, 2),
'costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),
'customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptMagicNumberRule (ADVICE)

File section 'script' contains magic number '7' in function 'parseCsv': '});'. Consider using a named constant instead.

Why: Ensures scripts don't contain magic numbers (use named constants)

Read more

'employeeId': cell(cols, 0), 'positionId': cell(cols, 1), 'effectiveDate': cell(cols, 2),
'costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),
'customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptMagicNumberRule (ADVICE)

File section 'script' contains magic number '8' in function 'parseCsv': '});'. Consider using a named constant instead.

Why: Ensures scripts don't contain magic numbers (use named constants)

Read more

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example audit, continued (21 to 40 of 40).


// Step 2: build WHERE ... IN lists so WQL only fetches the IDs in this file
var quoteList = function(ids) {
return list:distinct(list:filter(ids, i => !string:isBlank(i))).map(i => { "'" + i + "'" }).join(', ');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'quoteList'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change:

let

Read more

// Step 2: build WHERE ... IN lists so WQL only fetches the IDs in this file
var quoteList = function(ids) {
return list:distinct(list:filter(ids, i => !string:isBlank(i))).map(i => { "'" + i + "'" }).join(', ');
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptDescriptiveParameterRule (ADVICE)

Parameter 'i' in quoteList (calls map()) in function 'quoteList' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.

Why: Ensures function parameters use descriptive names when functions take function parameters (except 'a', 'b' for sort)

Read more

// Step 2: build WHERE ... IN lists so WQL only fetches the IDs in this file
var quoteList = function(ids) {
return list:distinct(list:filter(ids, i => !string:isBlank(i))).map(i => { "'" + i + "'" }).join(', ');
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptDescriptiveParameterRule (ADVICE)

Parameter 'i' in quoteList (calls map()) in function 'quoteList' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.

Why: Ensures function parameters use descriptive names when functions take function parameters (except 'a', 'b' for sort)

Read more

// Step 2: build WHERE ... IN lists so WQL only fetches the IDs in this file
var quoteList = function(ids) {
return list:distinct(list:filter(ids, i => !string:isBlank(i))).map(i => { "'" + i + "'" }).join(', ');
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptStringConcatRule (ADVICE)

File section 'script' uses string concatenation with + operator in function 'quoteList': '"'" + i + "'"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!).

Why: Detects string concatenation with + operator - use PMD templates with backticks and {{ }} instead

Suggested change:

`'{{i}}'`

Read more

return list:distinct(list:filter(ids, i => !string:isBlank(i))).map(i => { "'" + i + "'" }).join(', ');
};
var workerQuery = function(rows) {
return 'SELECT employeeID, positionID FROM workersForHCMReporting (dataSourceFilter = allActiveWorkers) WHERE employeeID IN (' + quoteList(rows.map(r => { r.employeeId })) + ')';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'workerQuery'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change:

let

Read more

};
var ref = function(element, idType, value) {
return '<bsvc:' + element + '><bsvc:ID bsvc:type="' + idType + '">' + xmlEscape(value) + '</bsvc:ID></bsvc:' + element + '>';
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptStringConcatRule (ADVICE)

File section 'script' uses string concatenation with + operator in function 'ref': ''<bsvc:' + element + '><bsvc:ID bsvc:type="' + idType + '">' + xmlEscapevalue + '</bsvc:ID></bsvc:' + element + '>''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!).

Why: Detects string concatenation with + operator - use PMD templates with backticks and {{ }} instead

Suggested change:

`<bsvc:{{element}}><bsvc:ID bsvc:type="{{idType}}">{{xmlEscapevalue}}</bsvc:ID></bsvc:{{element}}>`

Read more

// Matches Staffing v42.0 Change_Organization_Assignments_Request. Blank columns are omitted,
// which tells Workday to keep the existing assignment.
var buildSoap = function(r, autoComplete) {
var orgs = '';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptFunctionReturnConsistencyRule (ADVICE)

Function 'buildSoap' has some return statements but not all code paths return - consider adding else branches or a final return statement

Why: Functions should have consistent return patterns - either all code paths return a value or none do

Read more

// Matches Staffing v42.0 Change_Organization_Assignments_Request. Blank columns are omitted,
// which tells Workday to keep the existing assignment.
var buildSoap = function(r, autoComplete) {
var orgs = '';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'buildSoap'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change:

let

Read more

// which tells Workday to keep the existing assignment.
var buildSoap = function(r, autoComplete) {
var orgs = '';
if (!string:isBlank(r.companyRefId)) { orgs += ref('Company_Assignments_Reference', 'Company_Reference_ID', r.companyRefId); }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'orgs' in function 'buildSoap'. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change:

let

Read more

if (!string:isBlank(r.costCenterRefId)) { orgs += ref('Cost_Center_Assignments_Reference', 'Cost_Center_Reference_ID', r.costCenterRefId); }
if (!string:isBlank(r.regionRefId)) { orgs += ref('Region_Assignments_Reference', 'Region_Reference_ID', r.regionRefId); }
for (var c : r.customOrgs) {
orgs += '<bsvc:Custom_Organization_Assignment_Data>' + ref('Custom_Organization_Assignment_Reference', 'Custom_Organization_Reference_ID', c) + '</bsvc:Custom_Organization_Assignment_Data>';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ScriptVarUsageRule (ADVICE)

File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead.

Why: Ensures scripts use 'let' or 'const' instead of 'var' (best practice)

Suggested change:

let

Read more

@github-actions

Copy link
Copy Markdown

The Audit examples check failed because of the items under Fix before merge. Push a fix and it re-runs automatically.

Example audit

Audited examples/smart-csv-org-loader. Passed: hub packaging checks (folder name, example.json, README sections); no hardcoded Workday URLs or app ids; no debug logging.

2 to fix and 90 suggestion(s).

Fix before merge

Where Rule What to change
examples/smart-csv-org-loader/presentation/errorPage.pmd line 1 PMDSecurityDomainRule PMD page is missing required securityDomains list. All PMD pages must define at least one security domain (excludes microConclusion and error pages).
examples/smart-csv-org-loader/presentation/uploadAndValidateOrgCsv.pmd line 38 EndpointFailOnStatusCodesRule Inbound endpoint 'orgsWql' is missing required status codes: 400. Suggested: {"code": 400}.
Suggestions (90, never block)
Where Rule What to change
examples/smart-csv-org-loader ArcaneAuditorWarning Arcane Auditor could not parse part of this folder, so some script rules were skipped: Both LALR and Earley parsing failed: No terminal matches 'p' in the current parser context, at line 1 col 838
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> CreatedRow -> rowId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> batchId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> companyRefId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> costCenterRefId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> customOrgsPipeDelimited. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> effectiveDate. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> employeeId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> positionId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> regionRefId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> RowFields -> soapRequestXml. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> WriteBackStatus -> FaultText -> message. This expression uses "stringAtXPath", which throws an exception when the target value is not found. Prefer "stringAtXPathWithDefault" or "stringAtXPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: Loop -> filter. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestratePreferExplicitDefaultAccessor Location: ParseRequest -> batchId. This expression uses "stringAtJsonPath", which throws an exception when the target value is not found. Prefer "stringAtJsonPathWithDefault" or "stringAtJsonPathOrEmptyString" so missing values are handled explicitly, or validate first if the value is required.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationApiStepErrorHandlerRule API step 'CreateRow' must have a local error handler.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationApiStepErrorHandlerRule API step 'GetStagedRows' must have a local error handler.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationApiStepErrorHandlerRule API step 'PatchRowFault' must have a local error handler.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationApiStepErrorHandlerRule API step 'PatchRowSuccess' must have a local error handler.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationApiStepErrorHandlerRule API step 'SOAP_Call' must have a local error handler.
examples/smart-csv-org-loader/orchestration/processOrgAssignmentLoad.orchestration line 1 OrchestrationGlobalErrorHandlerRule Orchestration 'processOrgAssignmentLoad' must have a global error handler.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 7 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'cell'. Consider using 'let' or 'const' instead. Replace var cell with let cell.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 14 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'splitCells'. Consider using 'let' or 'const' instead. Replace var splitCells with let splitCells.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 15 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'splitCells': ''' + line.replace''''.replace','',' + '~''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace '~' + line.replace'~'''.replace',''~,~' + '~' with ~{{line.replace'~'''.replace',''~,~'}}~.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 19 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'parseCsv'. Consider using 'let' or 'const' instead. Replace var parseCsv with let parseCsv.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 20 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'rows' in function 'parseCsv'. Consider using 'let' or 'const' instead. Replace var rows with let rows.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 22 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'lines' in function 'parseCsv'. Consider using 'let' or 'const' instead. Replace var lines with let lines.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 24 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'lineNo' in function 'parseCsv'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 25 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 27 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'line' in function 'parseCsv'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 29 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'cols' in function 'parseCsv'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 33 ScriptMagicNumberRule File section 'script' contains magic number '2' in function 'parseCsv': ''costCenterRefId': cell(cols, 3), 'companyRefId': cell(cols, 4), 'regionRefId': cell(cols, 5),'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 34 ScriptMagicNumberRule File section 'script' contains magic number '3' in function 'parseCsv': ''customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 34 ScriptMagicNumberRule File section 'script' contains magic number '4' in function 'parseCsv': ''customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 34 ScriptMagicNumberRule File section 'script' contains magic number '5' in function 'parseCsv': ''customOrgs': list:filter([cell(cols, 6), cell(cols, 7), cell(cols, 8)], c => !string:isBlank(c))'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 35 ScriptDescriptiveParameterRule Parameter 'c' in parseCsv (calls arrow_function()) in function 'parseCsv' should be more descriptive. Consider using a more descriptive name, such as 'param1' instead. Single-letter parameters make functions that take function parameters harder to read and debug.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 35 ScriptMagicNumberRule File section 'script' contains magic number '6' in function 'parseCsv': '});'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 35 ScriptMagicNumberRule File section 'script' contains magic number '7' in function 'parseCsv': '});'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 35 ScriptMagicNumberRule File section 'script' contains magic number '8' in function 'parseCsv': '});'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 44 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'quoteList'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 45 ScriptDescriptiveParameterRule Parameter 'i' in quoteList (calls map()) in function 'quoteList' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 45 ScriptDescriptiveParameterRule Parameter 'i' in quoteList (calls map()) in function 'quoteList' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 45 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'quoteList': '"'" + i + "'"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "'" + i + "'" with '{{i}}'.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 47 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'workerQuery'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 48 ScriptDescriptiveParameterRule Parameter 'r' in workerQuery (calls map()) in function 'workerQuery' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 48 ScriptDescriptiveParameterRule Parameter 'r' in workerQuery (calls quoteList()) in function 'workerQuery' should be more descriptive. Consider using a more descriptive name, such as 'item' instead. Single-letter parameters make functions that take function parameters harder to read and debug.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 48 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'workerQuery': ''SELECT employeeID, positionID FROM workersForHCMReporting (dataSourceFilter = allActiveWorkers) WHERE employeeID IN (' + quoteListrows.maprr.employeeId + ')''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace 'SELECT employeeID, positionID FROM workersForHCMReporting (dataSourceFilter = allActiveWorkers) WHERE employeeID IN (' + quoteListrows.maprr.employeeId + ')' with SELECT employeeID, positionID FROM workersForHCMReporting (dataSourceFilter = allActiveWorkers) WHERE employeeID IN ({{quoteListrows.maprr.employeeId}}).
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 50 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'orgQuery'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 51 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'ids' in function 'orgQuery'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 52 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 54 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 56 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'orgQuery': ''SELECT referenceID, organizationType, inactive FROM organizations WHERE referenceID IN (' + quoteListids + ')''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace 'SELECT referenceID, organizationType, inactive FROM organizations WHERE referenceID IN (' + quoteListids + ')' with SELECT referenceID, organizationType, inactive FROM organizations WHERE referenceID IN ({{quoteListids}}).
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 59 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'xmlEscape'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 62 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'ref'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 63 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'ref': ''<bsvc:' + element + '><bsvc:ID bsvc:type="' + idType + '">' + xmlEscapevalue + '</bsvc:ID></bsvc:' + element + '>''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace '<bsvc:' + element + '><bsvc:ID bsvc:type="' + idType + '">' + xmlEscapevalue + '</bsvc:ID></bsvc:' + element + '>' with <bsvc:{{element}}><bsvc:ID bsvc:type="{{idType}}">{{xmlEscapevalue}}</bsvc:ID></bsvc:{{element}}>.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 68 ScriptFunctionReturnConsistencyRule Function 'buildSoap' has some return statements but not all code paths return - consider adding else branches or a final return statement
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 68 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'buildSoap'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 69 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'orgs' in function 'buildSoap'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 73 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 74 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'buildSoap': ''bsvc:Custom_Organization_Assignment_Data' + ref'Custom_Organization_Assignment_Reference''Custom_Organization_Reference_ID'c + '</bsvc:Custom_Organization_Assignment_Data>''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace '<bsvc:Custom_Organization_Assignment_Data>' + ref'Custom_Organization_Assignment_Reference''Custom_Organization_Reference_ID'c + '</bsvc:Custom_Organization_Assignment_Data>' with <bsvc:Custom_Organization_Assignment_Data>{{ref'Custom_Organization_Assignment_Reference''Custom_Organization_Reference_ID'c}}</bsvc:Custom_Organization_Assignment_Data>.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 77 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'buildSoap': '+'bsvc:Business_Process_Parametersbsvc:Auto_Complete' + autoComplete'true''false' + '</bsvc:Auto_Complete>bsvc:Run_Nowtrue</bsvc:Run_Now></bsvc:Business_Process_Parameters>' + '<bsvc:Change_Organization_Assignments_Data bsvc:Effective_Date="' + r.effectiveDate + '">''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace +'<bsvc:Business_Process_Parameters><bsvc:Auto_Complete>' + autoComplete'true''false' + '</bsvc:Auto_Complete><bsvc:Run_Now>true</bsvc:Run_Now></bsvc:Business_Process_Parameters>' + '<bsvc:Change_Organization_Assignments_Data bsvc:Effective_Date="' + r.effectiveDate + '">' with {{+'<bsvc:Business_Process_Parameters><bsvc:Auto_Complete>'}}{{autoComplete'true''false'}}</bsvc:Auto_Complete><bsvc:Run_Now>true</bsvc:Run_Now></bsvc:Business_Process_Parameters><bsvc:Change_Organization_Assignments_Data bsvc:Effective_Date="{{r.effectiveDate}}">.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 79 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'buildSoap': '+ref'Position_Reference''Position_ID'r.positionId + ref'Worker_Reference''Employee_ID'r.employeeId'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace +ref'Position_Reference''Position_ID'r.positionId + ref'Worker_Reference''Employee_ID'r.employeeId with {{+ref'Position_Reference''Position_ID'r.positionId}}{{ref'Worker_Reference''Employee_ID'r.employeeId}}.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 81 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'buildSoap': '+'bsvc:Position_Organization_Assignments_Data' + orgs + '</bsvc:Position_Organization_Assignments_Data>' + '</bsvc:Change_Organization_Assignments_Data></bsvc:Change_Organization_Assignments_Request>''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace +'<bsvc:Position_Organization_Assignments_Data>' + orgs + '</bsvc:Position_Organization_Assignments_Data>' + '</bsvc:Change_Organization_Assignments_Data></bsvc:Change_Organization_Assignments_Request>' with {{+'<bsvc:Position_Organization_Assignments_Data>'}}{{orgs}}</bsvc:Position_Organization_Assignments_Data></bsvc:Change_Organization_Assignments_Data></bsvc:Change_Organization_Assignments_Request>.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 85 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'checkOrg'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 88 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'checkOrg': '"Org Ref ID '" + id + "' does not exist"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "Org Ref ID '" + id + "' does not exist" with Org Ref ID '{{id}}' does not exist.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 90 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'org' in function 'checkOrg'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 91 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'checkOrg': '"Org Ref ID '" + id + "' is inactive"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "Org Ref ID '" + id + "' is inactive" with Org Ref ID '{{id}}' is inactive.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 93 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'checkOrg': '"'" + id + "' is a " + org.organizationType.descriptor + ", not a " + expectedType'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "'" + id + "' is a " + org.organizationType.descriptor + ", not a " + expectedType with '{{id}}' is a {{org.organizationType.descriptor}}, not a {{expectedType}}.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 100 ScriptComplexityRule Function 'validateRows' in 'script' has complexity of 14 (max recommended: 10). Consider refactoring.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 100 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 101 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'workerMap' in function 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 102 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 103 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'orgMap' in function 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 104 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 106 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'seen' in function 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 107 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 108 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'errors' in function 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 109 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'validateRows': 'r.employeeId + '|' + r.effectiveDate'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace r.employeeId + '|' + r.effectiveDate with {{r.employeeId}}|{{r.effectiveDate}}.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 109 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'dupKey' in function 'validateRows'. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 110 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'validateRows': ''Duplicate of row ' + mapgetseendupKey + ': one change per worker per effective date''. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace 'Duplicate of row ' + mapgetseendupKey + ': one change per worker per effective date' with Duplicate of row {{mapgetseendupKey}}: one change per worker per effective date.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 114 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'validateRows': '"Employee_ID '" + r.employeeId + "' is not an active worker"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "Employee_ID '" + r.employeeId + "' is not an active worker" with Employee_ID '{{r.employeeId}}' is not an active worker.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 116 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'validateRows': '"Position '" + r.positionId + "' isn't held by " + r.employeeId'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "Position '" + r.positionId + "' isn't held by " + r.employeeId with Position '{{r.positionId}}' isn't held by {{r.employeeId}}.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 119 ScriptStringConcatRule File section 'script' uses string concatenation with + operator in function 'validateRows': '"Effective_Date '" + r.effectiveDate + "' must be YYYY-MM-DD"'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace "Effective_Date '" + r.effectiveDate + "' must be YYYY-MM-DD" with Effective_Date '{{r.effectiveDate}}' must be YYYY-MM-DD.
examples/smart-csv-org-loader/presentation/scripts/csvParserAndValidator.script line 124 ScriptVarUsageRule File section 'script' uses 'var' declaration for variable 'var' in for-in loop. Consider using 'let' or 'const' instead. Suggested: let.
examples/smart-csv-org-loader/presentation/uploadAndValidateOrgCsv.pmd line 109 ScriptVarUsageRule File section 'presentation->body->children[4]->id: validateButton->onClick' uses 'var' declaration for variable 'orgResp'. Consider using 'let' or 'const' instead. Replace var orgResp with let orgResp.
examples/smart-csv-org-loader/presentation/uploadAndValidateOrgCsv.pmd line 109 ScriptVarUsageRule File section 'presentation->body->children[4]->id: validateButton->onClick' uses 'var' declaration for variable 'orgs'. Consider using 'let' or 'const' instead. Replace var orgs with let orgs.
examples/smart-csv-org-loader/presentation/uploadAndValidateOrgCsv.pmd line 109 ScriptVarUsageRule File section 'presentation->body->children[4]->id: validateButton->onClick' uses 'var' declaration for variable 'rows'. Consider using 'let' or 'const' instead. Replace var rows with let rows.
examples/smart-csv-org-loader/presentation/uploadAndValidateOrgCsv.pmd line 109 ScriptVarUsageRule File section 'presentation->body->children[4]->id: validateButton->onClick' uses 'var' declaration for variable 'workers'. Consider using 'let' or 'const' instead. Replace var workers with let workers.
examples/smart-csv-org-loader/presentation/viewLoadBatchHistory.pmd line 27 ScriptMagicNumberRule File section 'inboundEndpoints[1]->name: loadRows->url' contains magic number '100': ''orgAssignmentLoadRows?limit=100&offset=' + ((countRows.total != null && countRows.total > 100) ? (countRows.total - 100) : 0)'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/viewLoadBatchHistory.pmd line 27 ScriptMagicNumberRule File section 'inboundEndpoints[1]->name: loadRows->url' contains magic number '100': ''orgAssignmentLoadRows?limit=100&offset=' + ((countRows.total != null && countRows.total > 100) ? (countRows.total - 100) : 0)'. Consider using a named constant instead.
examples/smart-csv-org-loader/presentation/viewLoadBatchHistory.pmd line 27 ScriptStringConcatRule Inbound endpoint 'loadRows' uses string concatenation with + operator: ''orgAssignmentLoadRows?limit=100&offset=' + countRows.totalnullcountRows.total100countRows.total + 1000'. Consider using PMD template strings with backticks and {{ }} syntax instead (e.g., Hello {{name}}!). Replace 'orgAssignmentLoadRows?limit=100&offset=' + countRows.totalnullcountRows.total100countRows.total + 1000 with orgAssignmentLoadRows?limit=100&offset={{countRows.totalnullcountRows.total100countRows.total + 1000}}.

Run it yourself: ./scripts/install-arcane.sh once, then node scripts/audit-examples.mjs --changed. Rule explanations and fixes: docs/EXAMPLE_BEST_PRACTICES.md.

ACTION items fail the Audit examples check. ADVICE never blocks. Maintainers can add the audit-override label to merge with open ACTION items.

1 finding(s) are file-level and appear only in this summary.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants