cancel
Showing results for 
Search instead for 
Did you mean: 

Controlling SyncBO

Former Member
0 Kudos

Hello,

Is it possible (and how) to control an upload syncbo. For example, can you say that a specific syncbo(MAM25_005 - Time confirmation) not to synchronize. (Not send to the MI-server).

Kind regards,

Patrick Willems

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

We do something like this in our own Synchronize method

(The BO Names have been changed)

private void Synchronize() {

SmartSyncRuntime ssr = SmartSyncRuntime.getInstance();

SyncManager sync = SyncManager.getInstance();

SyncBoOutDeltaFacade delta = ssr.getSyncBoOutDeltaFacade();

SyncBoDeltaRequestFacade req = ssr.getSyncBoDeltaRequestFacade();

SyncBoDescriptorFacade descF = ssr.getSyncBoDescriptorFacade();

SyncBoDescriptor GoBo = descF.getSyncBoDescriptor("GO_BO");

SyncBoDescriptor NoGoBo = descF.getSyncBoDescriptor("NO_GO_BO");

SyncBoDeltaRequest goreq = req.getSyncBoDeltaRequest(GoBo);

SyncBoDeltaRequest nogoreq = req.getSyncBoDeltaRequest(NoGoBo);

delta.setSendType(GoBo, SyncBoOutDeltaSendType.SEND_DIRECT);

delta.setSendType(NoGoBo, SyncBoOutDeltaSendType.NO_SEND);

sync.synchronizeWithBackend();

}

Answers (3)

Answers (3)

p_willems
Explorer
0 Kudos

Hello Jo,

I have implemented yout suggestion for instance level. After I create the syncbo I set the sendtype to NO_SEND. Till so far no problem.

But after I synchronize and look at the status, the status is set to SEND.

Also an another problem. When I stop and start the tomcat server, the status is also set to SEND.

How can I prevent to set the status to SEND. (from my 2 problems site of view)

Patrick

Former Member
0 Kudos

hello patrick,

I forgot to mention that the value set thru

SyncBoOutDelta.setSendType as well as

SyncBoOutDeltaFacade.setSendType methods is

NOT persisted.

>But after I synchronize and look at the status, the

>status is set to SEND.

This is by design. The instance level send type values

will be set back to their default values as defined in

the SyncBo metadata.

>Also an another problem. When I stop and start the

>tomcat server, the status is also set to SEND.

Same reason as described above.

>How can I prevent to set the status to SEND.

If you want all your delta not uploaded definitely,

set your SyncBo attribute suppressUpload="true" in the

metadata.

Another way is by using the SyncBoOutDeltaListener.

However, the use of listeners is not recommended anymore

due to performance reasons. Still you can use them.

Implement a SyncBoOutDeltaListener that will be notified

by the framework during sync. And this registered

listener will be the one to set the sendType into the

outDelta instance that conforms to your criteria during

the notification.

Hope this helps.

Regards

Jo

Former Member
0 Kudos

hello jo,

I can see that you control the syncbo at sync time. Is it possible to control the syncbo before the sync is take place.

For example: You create a time confirmation and set something is that syncbo which tells the delta not to sync that syncbo?

Patrick

Former Member
0 Kudos

hello patrick,

the SyncBo does not store the send type info into its

every instance.

> Is it possible to control the syncbo before the sync is

> take place.

yes you can.

for descriptor level, you may suppress all out deltas

for a specific SyncBo and you can set this prior to your

client's synchronization. likewise, for instance level,

you can use the API i described; i.e after you have

inserted new time confirmation SyncBos, you can get the

delta iterator and set the send type for every instances.

after then you can invoke the sync button...

now, if you mean during the SyncBo design time, you can

set the SyncBo attribute suppressUpload="true" in your

metadata and this suppresses all delta uploads for that

SyncBo all through out.

regards

jo

Former Member
0 Kudos

hello patrick,

which MI version and patch level are you working on?

API-wise there are 2 levels on which you can suppress

the delta upload - instance level and descriptor level.

1.SyncBoDescriptor level (MI2.5 SP13 & later)

The SyncBoDescriptor level is added into SP13 for

performance consideration. You can set you SyncBo delta

send type by using the API.


 SyncBoOutDeltaFacade.setSendType(SyncBoDescriptor,  SyncBoOutDeltaSendType)

2) SyncBo instance level (2.1 & 2.5 SP12)

You have to use the following APIs


SyncBoOutDeltaFacade.getAllDelta():MeIterator
//loop into the iterator 
 //descriptor
 SyncBoOutDelta.getSyncBoDescriptor():SyncBoDescriptor
 //synckey
 SyncBoOutDelta.getSyncKey():Object
 //set send type
 SyncBoOutDelta.setSendType(SyncBoOutDeltaSendType);
//loop end

You need to retrieve the MeIterator of all the outDelta

instances and loop into it. Check on every instance's

descriptor and/or the synckey if necessary then set

the instance send type.

The parameter SyncBoDescriptor is the descriptor

of your SyncBo and SyncBoOutDeltaSendType is your delta

upload send type which could only be of the following

values:

NO_SEND - suppress the upload

SEND - send the delta according to the defined send type in the SyncBo metadata

SEND_DIRECT - send the delta synchronously

Take note that from 2.5 SP13, the instance level is

deprecated and the instance level send type value will

be disregarded if the the descriptor level send type is

set.

so in your case, to suppress MAM25_005 e.g.


//2.5 sp13 later
 SyncBoDescriptor mam005Desc = descriptorFacade.getSyncBoDescriptor("MAM25_005");
 SyncBoOutDeltaFacade.setSendType(mam005Desc ,   SyncBoOutDeltaSendType.NO_SEND);

//2.1 & 2.5 sp12 below
 SyncBoDescriptor mam005Desc = descriptorFacade.getSyncBoDescriptor("MAM25_005");
 MeIterator outDeltaIt = SyncBoOutDeltaFacade.getAllDelta();
 while(outDeltaIt.hasNext()){
  SyncBoOutDelta outDelta = (SyncBoOutDelta)it.next();
  if(outDelta .getSyncBoDescriptor()==mam005Desc)
    outDelta.setSendType(SyncBoOutDeltaSendType.NO_SEND);
 }

regards

jo