TDataViewSourceProcessus2 - Exemples

TDataViewSourceProcessus2 = class (TQubesDataViewSource)Interface de TDataViewSourceProcessus2Exemples de TDataViewSourceProcessus2

Non renseigné

uses
   SysUtils, QubesObjectStore,
   QubesDataViews, QubesDataViewsSources.Processus2, QubesDataViewsQuery;

const cDVName = 'DataViewName';
const cRUD = 'CITMOD016';

// définition des paramètres de la source
var srcParams : array of String;
srcParams.Add("Responsable obj=CURRENT_RESPONSABLES");
srcParams.Add("DateCloture Float=DateCloture");
srcParams.Add("Avancement String=ACTIVE_INT_TASKS");
srcParams.Add("value obj=value"); // champ indexé

var dataSource := TDataViewSourceProcessus2.Create(cRUD,srcParams);
dataSource.MarginUpdate := 0;
dataSource.LastInPSS := True;
//filtrage des données de la source
dataSource.AddPSSFilter('Status=Actif');
dataSource.AddPSSFilter('Concerned=1000000000000000001');
dataSource.AddPSSFilter('DateMini=43052');
dataSource.AddPSSFilter('DateMaxi=43060');

// définition des champs de la vue maintenue
var dvFields : array of String;
dvFields.Add('ExecutionNo');
dvFields.Add('Status');
dvFields.Add('Responsable');
dvFields.Add('DateCloture');
dvFields.Add('Avancement');
dvFields.Add('value');

var dataView := DeclareView(cDVName, dataSource, dvFields);

// test si un traitement est déjà en cours
if IncrementGlobalVar(cDVName) <> 1 then begin
   if dataView.DeadManSwitchActive then begin
      IncrementGlobalVar(cDVName, -1);
      raise Exception.Create('Update already in progress. Please wait');
   end;
end;

// récupération ou mise à jour de la vue maintenue
try
   dataView.MetaData['ProcessusRUD']:=cRUD;
   dataView.MetaData['ProcessusCfgField']:=dvFields.Join(',');
   dataView.MetaData['ProcessusCfgFilter']:=dataSource.PSSFilter;

   ObjectStore.Value[cDVName+'.CheckPoint'] := dataSource.Update(dataView, ObjectStore.Value[cDVName+'.CheckPoint']);
finally
   IncrementGlobalVar(cDVName, -1);
end;

// extraction des données de la vue maintenue
var query := TDataViewsQuery.Create;

var sql := 'select '+dvFields.Join(',')+' from '+cDVName + " order by cast(substr(json_extract(ExecutionNo, '$.id'),4) as numeric)";

var qResult := JSON.Parse(query.SelectAsJSON(sql));

var data := JSON.NewArray;

for var row:=0 to qResult.Length()-1 do begin
   var rowData := JSON.NewArray;
   var jsLine := qResult[row];
   for var col:=0 to dvFields.Length-1 do begin
      var value := jsLine[dvFields[col]];
      if StrBeginsWith(value,'"*ERR:unknown '+dvFields[col]) then
         rowData.Add(Null)
      else
         rowData.Add(jsLine[dvFields[col]]);
   end;
   data.Add(rowData);
end;

Print(qResult);

exemple de résultat :

[
  [
    "ExecutionNo" : "1000000000000000001",
    "Status" : "En cours",
    "Responsable" : {
      "id": "usr1",            // objet représentant le responsable
      "login": "admin",
      "name": "QuBES Admin"
    },
    "DateCloture" : null,
    "Avancement" : "5 - Saisie 1",
    "value" : "N/A"
  ],
  [
    "ExecutionNo" : "1000000000000000005",
    "Status" : "En cours",
    "Responsable" : {
      "id": "usr1",
      "login": "admin",
      "name": "QuBES Admin"
    },
    "DateCloture" : null,
    "Avancement" : "5 - Saisie 1",
    "value" : "861"
  ],
  [
    "ExecutionNo" : "1000000000000000014",
    "Status" :"Complet",
    "Responsable" : {
      "id": "usr1",
      "login": "admin",
      "name": "QuBES Admin"
    },
    "DateCloture" : "1899-12-30T00:00Z",
    "Avancement" : "5 - Saisie 1",
    "value" : "72"
  ]
]