« Publish (Instance) » : différence entre les versions

De Wiki1000
(Page créée avec « {{Tahoe}} <source lang='delphi'>procedure Publish(const iTopic:string; const iParam:variant);</source> Cette procédure permet d'envoyer un message aux abonnés d'un sujet. … »)
 
Aucun résumé des modifications
Ligne 14 : Ligne 14 :




Exemple
Exemple :
 
'''Utilisation basique :'''
 
<source lang='delphi'>
<source lang='delphi'>
procedure MyObject.Handler(const iTopic:string; const iEvent:Variant);
begin
begin
  unEntier := unEntier+1;
end;
end;
function MyObject.doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
begin
  unEntier := 0;
  Subscribe(sTopic,''Handler'');
  try
    // if pTopic match sTopic the Handler method will be called.
    // This message has no parameter, we can pass anything in the parameter
    Publish(pTopic,0);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;
</source>
'''Utilisation d'un paramètre objet :'''
<source lang='delphi'>
procedure Handler(const iTopic:string; const iEvent:variant);
var obj:TitObject;
begin
  obj := iEvent;
  if (obj is ClassNPA) then
  unEntier := (obj as ClassNPA).unEntier;
end;
function doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
var event:ClassNPA;
begin
  unEntier := 0;
  event := ClassNPA.Create;
  event.unEntier := 1;
  Subscribe(sTopic,''Handler'');
  try
    Publish(pTopic,event);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;
</source>
'''Souscription dans une règle d'initialisation :'''
<source lang='delphi'>
unit TestSYFREWF;
interface
Type
  PublishSubscribe = Class(TitObject)
  private
    procedure Action_Initialize:boolean;
  public
    Procedure doPublish;
    Procedure Handler(const iTopic:string; const iEvent:variant);
  end;
Implementation
{PublishSubscribe}
procedure PublishSubscribe.Action_Initialize:boolean;
//procedure Action_Initialize:boolean;
begin
  // We subscribe in an initialization rule.
  SubScribe('/MyTopic/*','Handler');
end;
Procedure PublishSubscribe.Handler(const iTopic:string; const iEvent:variant);
//Procedure Handler(const iTopic:string; const iEvent:variant);
var url:string;
begin
  // This handler is a router which republish a message to the UI
  // Build a first message with the current datetime.
  // The value is passed inside the topic which is formatted as an URL.
  url := 'forms://testpublishsubscribe/controls/memo';
  urlConcatParameter(url,'text', FormatDatetime('c',now));
  Publish(url,0);
 
  // Republish the message
  // The value is passed in the parameter
  Publish('forms://testpublishsubscribe/controls/memo/text',iEvent);
end;
Procedure PublishSubscribe.doPublish;
//Procedure doPublish;
begin
  // Test case
  // Publish a message to my topic so that the handler will republish it
  Publish('/MyTopic/subject', 'some text');
end;
</source>
</source>



Version du 24 octobre 2011 à 12:08

versiontahoe-32x32.png

procedure Publish(const iTopic:string; const iParam:variant);

Cette procédure permet d'envoyer un message aux abonnés d'un sujet.

iTopic Sujet du message.
iParam Paramètre du message.


Exemple :

Utilisation basique :

procedure MyObject.Handler(const iTopic:string; const iEvent:Variant);
begin
  unEntier := unEntier+1;
end;

function MyObject.doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
begin
  unEntier := 0;
  Subscribe(sTopic,''Handler'');
  try
    // if pTopic match sTopic the Handler method will be called.
    // This message has no parameter, we can pass anything in the parameter 
    Publish(pTopic,0);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;

Utilisation d'un paramètre objet :

procedure Handler(const iTopic:string; const iEvent:variant);
var obj:TitObject;
begin
  obj := iEvent;
  if (obj is ClassNPA) then
   unEntier := (obj as ClassNPA).unEntier;
end;

function doPublishSubscribe(const sTopic:string; const pTopic:string):boolean;
var event:ClassNPA;
begin
  unEntier := 0;
  event := ClassNPA.Create;
  event.unEntier := 1;
  Subscribe(sTopic,''Handler'');
  try
    Publish(pTopic,event);
    Result := unEntier=1;
  finally
  UnSubscribe(sTopic);
  end;
end;

Souscription dans une règle d'initialisation :

unit TestSYFREWF;
interface

Type
  PublishSubscribe = Class(TitObject)
  private
    procedure Action_Initialize:boolean;
  public
    Procedure doPublish;
    Procedure Handler(const iTopic:string; const iEvent:variant);
  end;

Implementation

{PublishSubscribe}

procedure PublishSubscribe.Action_Initialize:boolean;
//procedure Action_Initialize:boolean;
begin
  // We subscribe in an initialization rule.
  SubScribe('/MyTopic/*','Handler');
end;

Procedure PublishSubscribe.Handler(const iTopic:string; const iEvent:variant);
//Procedure Handler(const iTopic:string; const iEvent:variant);
var url:string;
begin
  // This handler is a router which republish a message to the UI

  // Build a first message with the current datetime.
  // The value is passed inside the topic which is formatted as an URL.
  url := 'forms://testpublishsubscribe/controls/memo';
  urlConcatParameter(url,'text', FormatDatetime('c',now));
  Publish(url,0);
  
  // Republish the message
  // The value is passed in the parameter
  Publish('forms://testpublishsubscribe/controls/memo/text',iEvent);
end;

Procedure PublishSubscribe.doPublish;
//Procedure doPublish;
begin
  // Test case
  // Publish a message to my topic so that the handler will republish it 
  Publish('/MyTopic/subject', 'some text');
end;

Voir aussi :

Objets métiers (tech)Développement DSM