new(basic.gblib): New batch features.
This commit is contained in:
parent
77da28e980
commit
0177717f6e
4 changed files with 78 additions and 29 deletions
|
@ -530,7 +530,11 @@ export class DialogKeywords {
|
|||
public async sendEmail({ pid, to, subject, body }) {
|
||||
const { min, user } = await DialogKeywords.getProcessInfo(pid);
|
||||
|
||||
if (!body) {
|
||||
if (!process.env.EMAIL_FROM){
|
||||
return;
|
||||
}
|
||||
|
||||
if (!body ) {
|
||||
body = "";
|
||||
};
|
||||
|
||||
|
|
|
@ -638,11 +638,12 @@ export class GBVMService extends GBService {
|
|||
// Expires token 10min. before or if it the first time, load it.
|
||||
|
||||
if (expiration < new Date().getTime() || firstTime) {
|
||||
console.log ('Expired. Refreshing token...');
|
||||
console.log (Expired. Refreshing token...' + expiration);
|
||||
const {token, expiresOn} = await sys.getCustomToken({pid, tokenName});
|
||||
|
||||
global[tokenName] = token;
|
||||
global[tokenName + "_expiresOn"]= expiresOn;
|
||||
console.log (DONE:' + new Date(global[tokenName + "_expiresOn"]);;
|
||||
}
|
||||
|
||||
if (__indexer == 0) {
|
||||
|
|
|
@ -40,7 +40,6 @@ import Path from 'path';
|
|||
* Image processing services of conversation to be called by BASIC.
|
||||
*/
|
||||
export class KeywordsExpressions {
|
||||
|
||||
public static splitParamsButIgnoreCommasInDoublequotes = (str: string) => {
|
||||
return str.split(',').reduce(
|
||||
(accum, curr) => {
|
||||
|
@ -50,7 +49,7 @@ export class KeywordsExpressions {
|
|||
if (curr === '') {
|
||||
curr = null;
|
||||
}
|
||||
accum.soFar.push(curr);
|
||||
accum.soFar.push(curr?curr.trim(): '');
|
||||
}
|
||||
if (curr.split('`').length % 2 == 0) {
|
||||
accum.isConcatting = !accum.isConcatting;
|
||||
|
@ -61,9 +60,7 @@ export class KeywordsExpressions {
|
|||
).soFar;
|
||||
};
|
||||
|
||||
|
||||
private static getParams = (text: string, names) => {
|
||||
|
||||
const items = KeywordsExpressions.splitParamsButIgnoreCommasInDoublequotes(text);
|
||||
|
||||
let i = 0;
|
||||
|
@ -104,12 +101,10 @@ export class KeywordsExpressions {
|
|||
keywords[i++] = [
|
||||
/^\s*INPUT(.*)/gim,
|
||||
($0, $1, $2) => {
|
||||
|
||||
let separator;
|
||||
if ($1.indexOf(',') > -1) {
|
||||
separator = ',';
|
||||
}
|
||||
else if ($1.indexOf(';') > -1) {
|
||||
} else if ($1.indexOf(';') > -1) {
|
||||
separator = ';';
|
||||
}
|
||||
let parts;
|
||||
|
@ -117,8 +112,7 @@ export class KeywordsExpressions {
|
|||
return `
|
||||
TALK ${parts[0]}
|
||||
HEAR ${parts[1]}`;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return `
|
||||
HEAR ${$1}`;
|
||||
}
|
||||
|
@ -158,8 +152,7 @@ export class KeywordsExpressions {
|
|||
let separator;
|
||||
if ($1.indexOf(',') > -1) {
|
||||
separator = ',';
|
||||
}
|
||||
else if ($1.indexOf(';') > -1) {
|
||||
} else if ($1.indexOf(';') > -1) {
|
||||
separator = ';';
|
||||
}
|
||||
let items;
|
||||
|
@ -205,9 +198,8 @@ export class KeywordsExpressions {
|
|||
|
||||
if (kind === 'AS' && KeywordsExpressions.isNumber(sessionName)) {
|
||||
const jParams = JSON.parse(`{${params}}`);
|
||||
const filename = `${jParams.url.substr(0, jParams.url.lastIndexOf("."))}.xlsx`;
|
||||
let code =
|
||||
`
|
||||
const filename = `${jParams.url.substr(0, jParams.url.lastIndexOf('.'))}.xlsx`;
|
||||
let code = `
|
||||
col = 1
|
||||
await sys.save({pid: pid,file: "${filename}", args: [id] })
|
||||
await dk.setFilter ({pid: pid, value: "id=" + id })
|
||||
|
@ -255,7 +247,6 @@ export class KeywordsExpressions {
|
|||
|
||||
keywords[i++] = [/^\s*for +(.*to.*)/gim, 'for ($1) {'];
|
||||
|
||||
|
||||
keywords[i++] = [
|
||||
/^\s*((?:[a-z]+.?)(?:(?:\w+).)(?:\w+)*)\s*=\s*pay\s*(.*)/gim,
|
||||
($0, $1, $2, $3) => {
|
||||
|
@ -342,7 +333,6 @@ export class KeywordsExpressions {
|
|||
keywords[i++] = [
|
||||
/^\s*FOR EACH\s*(.*)\s*IN\s*(.*)/gim,
|
||||
($0, $1, $2) => {
|
||||
|
||||
return `
|
||||
|
||||
__totalCalls = 10;
|
||||
|
@ -366,9 +356,9 @@ export class KeywordsExpressions {
|
|||
}
|
||||
];
|
||||
|
||||
keywords[i++] = [/^\s*next *$/gim,
|
||||
keywords[i++] = [
|
||||
/^\s*next *$/gim,
|
||||
($0, $1, $2) => {
|
||||
|
||||
return `
|
||||
|
||||
__index = __index + 1;
|
||||
|
@ -411,6 +401,64 @@ export class KeywordsExpressions {
|
|||
}
|
||||
];
|
||||
|
||||
keywords[i++] = [
|
||||
/^\s*synchronize\s*(.*)/gim,
|
||||
($0, $1) => {
|
||||
const items = KeywordsExpressions.splitParamsButIgnoreCommasInDoublequotes($1);
|
||||
const [url, tableName, key1, pageVariable, limitVariable] = items;
|
||||
|
||||
return `
|
||||
|
||||
if (!limit) limit = 100;
|
||||
__page = 1
|
||||
while (__page > 0 && __page < pages) {
|
||||
|
||||
await retry(
|
||||
async (bail) => {
|
||||
await ensureTokens();
|
||||
__res = await sys.getHttp ({pid: pid, file: host + '${url}' + '?' + pageVariable + '=' + __page + '&' + limitVariable + '=' + limit, addressOrHeaders: headers, httpUsername, httpPs})
|
||||
},{ retries: 5});
|
||||
|
||||
res = __res
|
||||
list1 = res.data
|
||||
|
||||
|
||||
let j1 = 0
|
||||
items1 = []
|
||||
while (j1 < ubound(list1)) {
|
||||
detail_id = caseInsensitive(list1[j1])['${key1}']
|
||||
|
||||
await retry(
|
||||
async (bail) => {
|
||||
await ensureTokens();
|
||||
__res = await sys.getHttp ({pid: pid, file: host + '${url}' + '/' + detail_id, addressOrHeaders: headers, httpUsername, httpPs})
|
||||
},{ retries: 5});
|
||||
|
||||
res = __res
|
||||
|
||||
items1[j1] = res.data
|
||||
|
||||
j1 = j1 + 1
|
||||
}
|
||||
__reportMerge1 = await sys.merge({pid: pid, file: '${tableName}' , data: items1 , key1: '${key1}'})
|
||||
|
||||
__reportMerge.adds += __reportMerge1.adds;
|
||||
__reportMerge.updates += __reportMerge1.updates;
|
||||
__reportMerge.skipped += __reportMerge1.skipped;
|
||||
__reportMerge.title = __reportMerge1.title;
|
||||
REPORT = __report();
|
||||
|
||||
__page = __page + 1
|
||||
|
||||
if (list1?.length < limit) {
|
||||
__page = 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
`;
|
||||
}
|
||||
];
|
||||
|
||||
keywords[i++] = [
|
||||
/^\s*(.*)\=\s*(REWRITE)(\s*)(.*)/gim,
|
||||
|
@ -451,8 +499,7 @@ export class KeywordsExpressions {
|
|||
|
||||
if (params[1]) {
|
||||
return `await sys.deleteFromStorage ({pid: pid, ${params}})`;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return `await sys.deleteFile ({pid: pid, ${params}})`;
|
||||
}
|
||||
}
|
||||
|
@ -865,7 +912,6 @@ export class KeywordsExpressions {
|
|||
keywords[i++] = [
|
||||
/^\s*((?:[a-z]+.?)(?:(?:\w+).)(?:\w+)*)\s*=\s*post\s*(.*)/gim,
|
||||
($0, $1, $2, $3) => {
|
||||
|
||||
const args = $2.split(',');
|
||||
|
||||
return `
|
||||
|
@ -972,13 +1018,12 @@ export class KeywordsExpressions {
|
|||
keywords[i++] = [
|
||||
/^\s*(talk)(\s*)(.*)/gim,
|
||||
($0, $1, $2, $3) => {
|
||||
|
||||
$3 = GBVMService.normalizeQuotes($3);
|
||||
|
||||
// // Uses auto quote if this is a phrase with more then one word.
|
||||
|
||||
if (!($3.trim().substr(0, 1) === '`' || $3.trim().substr(0, 1) === "'")) {
|
||||
$3 = "`" + $3 + "`";
|
||||
$3 = '`' + $3 + '`';
|
||||
}
|
||||
return `await dk.talk ({pid: pid, text: ${$3}})`;
|
||||
}
|
||||
|
@ -1214,12 +1259,11 @@ export class KeywordsExpressions {
|
|||
let index = 0;
|
||||
|
||||
fields.forEach(field => {
|
||||
|
||||
// Extracts only the last part of the variable like 'column'
|
||||
// from 'row.column'.
|
||||
|
||||
const fieldRegExp = /(?:.*\.)*(.*)/gim;
|
||||
let name = fieldRegExp.exec(field.trim())[1]
|
||||
let name = fieldRegExp.exec(field.trim())[1];
|
||||
|
||||
fieldsNamesOnly.push(`'${name}'`);
|
||||
});
|
||||
|
|
|
@ -751,7 +751,7 @@ export class SystemKeywords {
|
|||
{
|
||||
retries: 5,
|
||||
onRetry: err => {
|
||||
GBLog.error(`Retrying SaveToStorageBatch due to: ${err.message}.`);
|
||||
GBLog.error(`Retrying SaveToStorageBatch due to: ${JSON.stringify(err)}.`);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
Loading…
Add table
Reference in a new issue