AddAction (TSearchResult)
<source lang='delphi'>procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:string);</source>
Cette méthode enregistre une action sur un résultat de recherche.
iPos | Défini la position de l'action dans la vue du résultat | sapLeft,sapRight | ||||||
iType | Défini le type de l'action | satNone,satOpenForm,satOpenPanel | ||||||
iTitle | Défini le libellé de l'action (utilisé comme bouton) | |||||||
iParameter | Défini le paramètre associé à l'action |
|
Classe action
Lorsque le type d'action est satOpenPanel le paramètre doit être le nom d'une classe non persistante implémentant une méthode jon Execute.
La signature de cette méthode doit être :
<source lang="delphi">
Function Execute(action:TjsonStruct; resp:TJson):boolean;
</source>
action | input | Structure json contenant le résultat de recherche. | '{name:"xxx", param:{itemId:"1B28EFFFF1C30002001E0000007F0610", .... valeurs des attributs de la clé de recherche pour ce résultat ...}}' |
resp | output | Objet json contenant une structure de données alimentant la grille résultat du panel action |
Exemple
Afficher les pièces comptables sur un résultat de recherche retournant un tiers.
1. Enregistrer l'action sur le résultat de recherche en utilisant la propriété AfterCode de la clé de recherche :
<source lang="delphi"> //procedure Initialize; var sk:TSearchKey; AStr:string;
function _FormOfClass(const iClass:string):string; begin Result := iClass+':'+TFacadeModel.FindFormOfClass(iClass)+';'; end;
begin
sk := ModelManager.RegisterSearchKey(10,'TRoleTiers', 'Caption,Tiers.code,Tiers.caption,Tiers.raisonsociale,SitePrivilegie.Adresse.codePostal,SitePrivilegie.Adresse.ville,SitePrivilegie.Adresse.telephone1', _FormOfClass('TClient')+ _FormOfClass('TFournisseur')+ _FormOfClass('TSalarie')+ _FormOfClass('TTiersDivers')+ _FormOfClass('TTransporteur')+ _FormOfClass('TIntraGroupe') ); sk.Limits := 20; sk.ExtraNames := 'SitePrivilegie.Adresse.nomRueVoie'; sk.FormatValue := _TP('@Tiers.code@ @Tiers.RaisonSociale@ @SitePrivilegie.Adresse.nomRueVoie@ @SitePrivilegie.Adresse.codePostal@ @SitePrivilegie.Adresse.ville@ @SitePrivilegie.Adresse.telephone1@'); sk.OrderBy := 'Tiers.code'; // AStr := 'begin '; if TFacadeModel.hasAccounting() then begin AStr := AStr+ ' AddAction(sapRight,satOpenPanel,_TP(Voir les pièces comptables),search,actionTiersPieces);'+ end; AStr := AStr+' end;'; // sk.AfterCode := AStr;
end; </source>
2. Définir une classe exécutant la recherche des pièces comptable et alimentant le panneau déplié dans l'interface utilisateur
<source lang="delphi"> unit htmlportalPackage; interface
Type
ActionTiersPieces = Class(TitObject) {$O modified="1899-12-30T00:00:00" label="Classe support recherche des pièces de compte" options=cloNoPersistent} public Function Execute(action:TjsonStruct; resp:TJson):boolean; Procedure Test; end;
{! DIR ActionTiersPieces} {$MS ActionTiersPieces.Execute soapName="MethodName"} {$MS ActionTiersPieces.Test soapName="MethodName"} {!END DIR}
{! DOC ActionTiersPieces}
{!END DOC}
Implementation
{! METHODS ActionTiersPieces} Function ActionTiersPieces.Execute(action:TjsonStruct; resp:TJson):boolean; Type
TiersPiece = viewOf(TPiece) numero:string = numero; datePiece:TDatetime = pDate; reference:String = reference; referenceOrigine: string = referenceOrigine; journalCode:string = journal.code; etablissementCaption:string = etablissement.Caption; compteGeneral:string = ecrituresList.compteGeneral.codeCompte; roleTiers:TRoleTiers = ecrituresList.roleTiers; typeLot:Integer = lot.typeLot; end;
function _GetTitle():string; begin Result := Format(_TP('Pièces pour le tiers %s - %s'),[ action.param.KeyValue['Tiers.code'], action.param.KeyValue['Tiers.caption'] ]); end;
function _FormatDate(dd:TDatetime):string; begin Result := DateToStr(dd); //localized end;
function _FormatQuantity(q:TQuantity):string; begin Result := q.AsString; end;
function _FormatCurrency(montant:Currency; const iDevise:string):string; begin Result := FormatFloat('0.00',montant); end;
function _FormatEnum(const iEnumName:String; value:Integer):string; begin Result := ModelManager.GetEnumName(iEnumName,value); end;
function _TypeLot(value:Integer):string; begin if value=TypeLot_Simulation then Result := _TP('Simulation') else if value=TypeLot_Reel then Result := _TP('Réel') else Result := inttostr(value); end;
var itemId,aClass,aForm:string; vSel:TSelector; inst:TiersPiece;
idx,idv,idr,limits:Integer; SR:TjsonStruct; SA:TjsonArray;
begin
Result := FALSE;
// This is TRoleTiers oid if action.Exists('param.itemId') then itemId := action.param.itemId else itemId := ;
if itemId= then Exit; SR := resp.AddStruct('panel','{panelId:"tierspieces-'+itemId+'", title:"'+_GetTitle+'"}'); ///////////////////////////////////// SR.addStruct('layout','{ name:"body" }'); idx := 0; idv:=0; SR.facets[idx].id := idx; SR.facets[idx].title := ; SR.facets[idx].type := 'list'; SR.facets[idx].position := 'body'; SR.facets[idx].values[idv].id := idv; SR.facets[idx].values[idv].facet := idx; SR.facets[idx].values[idv].class := 'tabular'; SR.facets[idx].values[idv].usingMainController := true; SR.facets[idx].values[idv].title := _GetTitle; SR.facets[idx].values[idv].AddStruct('table','{columnDefs:[],rows:[]}');
SA := SR.facets[idx].values[idv].table.columnDefs; SA.AddStruct('{field:"a", headerName:"'+_TP('Pièce')+'", cellRenderer: "linkRenderer" }'); SA.AddStruct('{field:"b", headerName:"'+_TP('Type')+'"}'); SA.AddStruct('{field:"c", headerName:"'+_TP('Date')+'"}'); SA.AddStruct('{field:"d", headerName:"'+_TP('Compte')+'"}'); SA.AddStruct('{field:"e", headerName:"'+_TP('Journal')+'"}'); SA.AddStruct('{field:"f", headerName:"'+_TP('Etablissement')+'"}'); SA.AddStruct('{field:"g", headerName:"'+_TP('Référence')+'"}'); SA.AddStruct('{field:"h", headerName:"'+_TP('Référence externe')+'"}'); idr := 0; limits := 10; SA := SR.facets[idx].values[idv].table.rows; vSel := TiersPiece.CreateSelector('(oidRoleTiers=%1)', '-datePiece', false, [itemId]); foreach inst in vSel.AsCursor do begin SA.AddStruct(Format('{a:{title:"%s", link:"%s", linkTitle:"%s"}, b:"%s", c:"%s", d:"%s", e:"%s", f:"%s", g:"%s", h:"%s"}',[ inst.numero, Format('%s?ArgTypeEcriture=mptInteger(%d)',[TFacadeModel.GetUrlOfObject(inst.oid),inst.typeLot]), Format(_TP('Pièce #%s'),[inst.numero]), // _TypeLot(inst.typeLot), _FormatDate(inst.datePiece), inst.compteGeneral, inst.journalCode, inst.etablissementCaption, inst.reference, inst.referenceOrigine ])); idr := idr+1; if idr=limits then break; end;
Result := True;
end;
Procedure ActionTiersPieces.Test; var action,resp:Tjson; SR:TjsonStruct; SS:string; begin
action := TJson.Create('{name:"", param:{itemId:"1B28EFFFF1C30002001E0000007F0610", code:"XXX", Caption:"YYY"}}'); resp := TJson.Create('{}'); Execute(action,resp); resp.CopyToClipboard;
end;
{!END METHODS}
end. </source>