AddAction (TSearchResult)
De Wiki1000
procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:string);
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 :
Function Execute(action:TjsonStruct; resp:TJson):boolean;
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 :
//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;
2. Définir une classe exécutant la recherche des pièces comptable et alimentant le panneau déplié dans l'interface utilisateur
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.