Losing value after split/join

Hi,
In my process, there is a split/join activity. Before the split, there is an interactivity activity. User can set the BPMObject values.
Then, in the split/join, all interactive activities can change the BPMObject values. Before the join, the process works fine.
However, after join, the interactive activity only gets the original BPMObject values. All changes are lost.
Argument mapping of input ScreenFlow for the final interactive activity is: var1vpsfArg=var1
(var1 is the Instance variable)
How to get the updated value?
Sincerely,

Hi,
I don't think this was caused by your argument mapping. Whenever you're having trouble getting the new information out of a Join activity, the problem is usually the logic in the Join activity itself.
There are two ways you can treat a Split / Join pattern. If you right mouse click the Split -> Properties -> Advanced, you'll see a check box that allows you to either generate copies (the default) or not generate copies. This means that the transitions leaving the Split can either each have their own independent copy of the original instance variable or all the transitions leaving the split can share original instance variable.
I'd guess you're not seeing information flowing out of the Join because the Split is set to generate copies and you're not retrieving the copied information in the Join. If you're curious, here's what the engine does when it hits a Split activity that is set to generate copies:
1. Instance arrives in the Split activty
2. The engine automatically sends the original (copy 0) instance with all its variables to the Join activity
3. If there are two transitions leaving the Split, the engine automatically creates a copy of the instance for each of the transitions and sends them to the two activities that follow the Split via their respective transitions. If the two activities that followed the Split were "Check Credit" and "Check Inventory", you would now have the original instance in the Join (copy 0) and a copy (copy1) in the activity "Check Credit" and a copy (copy 2) in "Check Inventory".
4. As an end user completes the work in "Check Credit" the copy arrives in the Join activity and the logic in the Join executes
5. As an end user completes the work in "Check Inventory" the copy arrives in the Join activity and the logic in the Join executes
6. Now that all the copies have arrived and completed the Join, the engine automatically moves the original instance (copy 0) out the Join activity and downstream in the process.
Here's the logic you might want to add to your Join activity (the logic below assumes I named my activities "Check Credit" and "Check Inventory"). You'll notice that anywhere where you're refering to instance information that would have been set in either of the two activities between the Split and Join are referred to inside the Join's logic using the prefix "copy.". This "copy." is only used inside the Join activity and not in the Split (no logic needed here) or "Check Credit" or "Check Inventory".
<pre class="jive-pre"><font size= 2 color="navy">// this lets you know where this copy came from
logMessage "JOIN: previous activity was: " + copy.activity.source.name using severity = DEBUG
<br>
case copy.activity.source.name
when "CheckCredit" then
order.creditStatus = copy.order.creditStatus
when "CheckInventory" then
order.status = copy.order.status
// the "else" should not have been hit if you've done this correctly
else
order.status = "Problem"
end</font></pre>
After end users finish their work in the "Check Credit" activity this logic exectutes. The Join activity's logic uses the "copy.activity.source.name" variable to determine where the copy is coming from. Since in this example there are just two activities that immediately precede the Join, there are only two "when" clauses in the case statement. If there had been 4, then there would be 4 "when" clauses.
It's important to note the name of the activity in the logic above. Notice that the friendly labels are "Check Credit" and "Check Inventory"? Right mouse click each of your activities that immediately precede the Join -> click Properties and note the read only text in the "Activity id" field for each of these activities. In this example, even though the activity appears to be named "Check Credit" the name the logic will use will be "CheckCredit" without the space. The value in the activity's activity id field is what is passed into the Join logic's "copy.activity.source.name" variable.
What would happen if you didn't have the "case" in the logic above? You'd see the variable information in the last copy arriving into the Join overwrite the information written in previous copies. The last copy in would win.
In the second paragraph of this, I mentioned that you can choose to either generate copies (the default) or not generate copies (by unchecking the checkbox). I tend to leave it the default simply because it's the way I've always done it. You need to be careful because if you place a new activity just before your Join, the logic in the Join will need to change to accommodate the new activity in a new "when" clause. If you choose to not generate copies, then you don't need any of the logic shown above in the Join activity.
Hope this helps,
Dan

Similar Messages

  • Problem with variable inside split-join

    Hello,
    I'm using Oracle BOM Suite 10.3.0.0 and i want to use the split gateway.
    In general the split activity ends with a join.
    the problem is when i affect a value to a variable between the split and join, it could not get this value after the join, which means after the join the variable becomes empty just like it was before the split.
    could anyone help me please.
    thanks

    HI
    Case 1: Instance variables are not shared:
    At join you can copy the variables from one of the branches to the main instance (that waits at join).
    this.instanceVar = copy.instanceVar
    This will copy the value of variable 'instanceVar' from the instance that just arrived at join to the instance that was waiting at join (main instance)
    Case 2: Instance variables are shared:
    This would mean that the main instance shares its variables with the child instances (instances between split - join). In such a case, when a variable is updated by any of the branches, the change is reflect in all the copies.
    You can set the property to share or not to share instance variables, in the advanced properties of the split activity.
    HTH
    SAtinder

  • Grab in split-join

    I have a grab activity which is set to from all to all. The process has a split-join. The user cannot grab an activity which is in a branch of split-join to outside the split-join or grab an acitivity which is outside the split-join into one branch of split-join. If I want to grab an activity of a branch to outside split-join, I can abort all activities in all branches and the process goes to join. Or I can grab all acitivities in all branches to the final activity before join and execute them to join. Is there any other method to grab from activity which is inside split-join to outside the gateway?

    Hi,
    Thanks for your reply. I create a new grab activity and set it to grab from all to all.
    In a new instance, if the process is inside the split-join, the new grab activity is the same as the first one. It is shows that the instance in a branch can be grabbed within the split-join.
    If the instance is outside the split-join, the grab activity cannot grab the instance to the branch.
    For example, the split-join has 2 branches. Each has 3 activities, named as
    branch 1: a1, a2, a3;
    branch 2: b1, b2, b3.
    Before the split, there are 2 activities named as c1, c2. After the join, 2 activities named c3, c4.
    C1 cannot be grabbed to b2. b2 cannot be grabbed to c4.

  • Aggregating output of two BS in OSB Split join

    Hi,
    i am using split join to invoke two BS and after the each invoke activity in parallel branch i have placed assign activity and assigning output variable of in voke to reply activity output variable response.parameter . However in o/p i am getting response of only one BS. can any one help on how to aggregating output of two BS in OSB Split join . my output is coming like this
    <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Body>
    <ns2:NewOperationResponse xmlns:ns2="http://www.example.org/SjWsdl/">output</ns2:NewOperationResponse> -------->this is o/p of one BS. But i want to display O/p of two BS
    </soap-env:Body>
    </soap-env:Envelope>
    thanks in advance..
    Edited by: 11207106008 on Jun 26, 2012 10:11 PM
    Edited by: 11207106008 on Jun 26, 2012 10:12 PM
    Edited by: 11207106008 on Jun 26, 2012 10:13 PM

    Suppose you saves the response of each BS in variables: $response1 and $response2
    then you need to configure the replace action after the parallel branch like this:
    Replace node content of . in variable <variable name of reply variable> with <Expression>
    Where you can provide in <Expression> a simple XQuery expression to combine the two variable contents. (Choose a root node of your choice, I have used AggregatedResponse)
    <AggregatedResponse>
    {$response1, $response2}
    </AggregatedResponse>

  • Grab from an instance within split join

    Hi All
    I have a process, and every now and then a user from role 'G' wants to grab the instances of a process (that may exist in any activity) to one of his activities, say 'AAG' (Activity After Grab :)). The Grab activities properties are defined so that it can grab instances from 'All' activities and then assign to 'AAG'.
    You can visualize the process like this:
    Activity A1 --> Split ----> branch 1 after split forwards to Activity AS1, brach 2 after split forwards to Activity AS2 ---> join ---> A3 --> A4 ---> AAG --> A5 ---> end
    Now when an instance has executed the split, the main instance waits at join. THe child instances are each at activity AS1 and AS2.
    When a user wants to grab this instance, the idea is that AS1 and AS2 should disappear, the instance at join should go to AAG.
    To realize that, if I try to grab the instance waiting at join, I can move this to AAG. However instances at AS1 and AS2 still remain there.
    If I try to grab instances at AS1 or AS2, I can not send them to AAG.
    Any workarounds?
    I am basically using PAPI to get hold of the instances. Was thinking of grabbing the instance at join, and terminating all others. But am looking for a better solution.
    THanks
    Satinder

    Hi Dan
    You are right, this might be an option (I have not yet tried it though). But I guess it still might not be the best option because -
    1. This user can grab instance in any activity and assign to AAG. Now if an activity is not within split-join, then we dont really need to interrupt the instance and call this message activity, a grab works fine. Message activity will also work fine, but that would mean that for every activity in the process I will need to add a conditional transition (executed when flagToGoToAAG = true) that goes to AAG.
    2. We got a little more than usual complex process. It has about 6-7 splits. Also there are about three Grab activities. This would mean about 7*3 additional transitions originating from different joins.
    I was looking for a solution may be that can process/abort all instances within split-join when the instance at join is grabbed.
    Thanks for your help.
    Cheers
    BTW, I have never used a MessageWait, in case this becomes the only option available, could you let me know how to create an interrupt from PAPI for this messageWait.
    Thanks a lot
    Best
    Satinder

  • Calculation of Depreciation on Net Book Value after posting Revaluation on

    How to calculate the depreciation on Net book value after posting Balance sheet revaluation ABAW? The depreciation is been calculated on APC and not on NBV, as the APC of asset has been revalued after the revalution posting, ideally the next period depreciation should be calculating on the new NBV, but the system is not doing this. Is there any specific configuration that Iam missing here.
    Kindly Reply.
    Jyoti

    The forum [FPM - General|Enterprise Performance Management (SAP EPM); in which you originally posted your question deals mainly with the financial performance applications otherwise known as Enterprise Performance Management (EPM) carrying the BusinessObjects brand.   Your question pertains to SAP [ERP Financials - Asset Accounting|SAP ERP Financials  - Asset Accounting; which is covered by another forum.  Therefore your message has been moved.  Please adjust any bookmarks you might have and post to the appropriate area in the future, that way you are assured you will have the right audience reading your posts.
    Thanks and best regards,
    [Jeffrey Holdeman|http://wiki.sdn.sap.com/wiki/display/profile/Jeffrey+Holdeman]
    SAP Labs, LLC
    BusinessObjects Division
    Americas Customer Solutions Adoption (CSA) team

  • Exception while executing split join in ALSB

    Hi
    When i am executing splitjoin flow in ALSB i am getting below exception
    ####<Nov 29, 2010 5:02:17 AM EST> <Error> <BPEL Kernel> <gifsmrt> <AdminServer> <[ACTIVE] ExecuteThread: '8' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1291024937262> <BEA-2032000> *<Error during invocation of "MICAPI/Proxy Services/SplitJoin" for event "CPS_IWGIF_Proxy@GetContractFinance" of type "com.bea.bpel.internal.dispatcher.message.ServiceResponseMessageExchangeImpl".*
    *com.bea.bpel.interpreter.exception.MissingReplyException: The message for partner link 'SplitJoin', operation 'GetContractFinance' and message exchange token 'null' has not been replied to.: Fault [{http://docs.oasis-open.org/wsbpel/2.0/process/executable}missingReply] The message for partner link 'SplitJoin', operation 'GetContractFinance' and message exchange token 'null' has not been replied to.*Executing Process Reference: MICAPI/Proxy Services/SplitJoin; instance ID: uuid:11d1def534ea1be0:-5e2ac50e:12b0eb1ffb4:-7b00; thread: Thread 26 (RUNNING); frame ID: null; location: null
    at com.bea.bpel.interpreter.internal.InterpreterFactory$ReplyEventListener.onTerminate(InterpreterFactory.java:84)
    at com.bea.bpel.interpreter.internal.state.StateContainerImpl.terminate(StateContainerImpl.java:131)
    at com.bea.bpel.interpreter.internal.program.StackFrameImpl.delete(StackFrameImpl.java:558)
    at com.bea.bpel.interpreter.internal.program.StackFrameImpl.delete(StackFrameImpl.java:572)
    at com.bea.bpel.interpreter.internal.program.StackFrameImpl.terminate(StackFrameImpl.java:535)
    at com.bea.bpel.interpreter.internal.program.ExecutionThreadImpl.pop(ExecutionThreadImpl.java:79)
    at com.bea.bpel.interpreter.internal.program.ProgramImpl.pop(ProgramImpl.java:395)
    at com.bea.bpel.interpreter.internal.operation.transition.FaultTransition.raise(FaultTransition.java:220)
    at com.bea.bpel.interpreter.internal.operation.transition.FaultTransition.execute(FaultTransition.java:85)
    at com.bea.bpel.interpreter.internal.Interpreter.postProcess(Interpreter.java:224)
    at com.bea.bpel.interpreter.internal.Interpreter.interpret(Interpreter.java:169)
    at com.bea.bpel.interpreter.internal.Interpreter.invoke(Interpreter.java:82)
    at com.bea.bpel.internal.dispatcher.EngineManagerImpl.dispatch(EngineManagerImpl.java:55)
    at com.bea.bpel.internal.dispatcher.SchedulerServiceContextImpl.fireEventMessage(SchedulerServiceContextImpl.java:184)
    at com.bea.bpel.internal.dispatcher.SchedulerServiceContextImpl.fireEvent(SchedulerServiceContextImpl.java:67)
    at com.bea.alsb.flow.scheduler.SchedulerServiceImpl$1.run(SchedulerServiceImpl.java:35)
    at weblogic.work.ContextWrap.run(ContextWrap.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:464)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
    and fault message as
    <con1:faultcode xmlns:exec="http://docs.oasis-open.org/wsbpel/2.0/process/executable">exec:missingReply</con1:faultcode>
    <con1:faultstring>The message for partner link 'SplitJoin', operation 'GetContractFinance' and message exchange token 'null' has not been replied to.</con1:faultstring>
    Can someone let me know what might went wrong in my flow?

    mmm as far as I remember it's available only in 3.0, not in 2.6
    http://download.oracle.com/docs/cd/E11036_01/alsb30/userguide/splitjoin.html
    and see also the excellent Biemond blog http://biemond.blogspot.com/2008/11/split-join-in-oracle-service-bus.html

  • Multi Mapping : How to get Message count after splitting

    Hi all,
    I am following below blog.
    /people/narendra.jain/blog/2005/12/30/various-multi-mappings-and-optimizing-their-implementation-in-integration-processes-bpm-in-xi
    Can any body please tell me how to get the count of messages generated after splitting in the message mapping.. I have created the message data type but not aware what is needed to be done.
    Thanks and best regards,
    Kulwant Singh

    Multi mappings r done in order to split the messages to the number of messages required by the user. So for 1:N mapping, the details about "N" is based on ur requirement. So its not like - when u split, any number of message could get created. The count would be dependent on u.
    Regards,
    Prateek

  • How can I Route to two proxies or business services with out split join

    Hi,
    How are you?
    I´m trying to use a proxy to invoke 2 other proxiers or more at the same time but when trying to build a Split Join is giving an Error about the Security that is in the WSDL which is WSSecurity, so far I think that SPlit Join can´t handle this and is a must right now so I´m trying to figure out how to Route a Message to two proxies or business services doesn´t matter if it is in a secuencial way.
    Hope somebody knows what to do.
    Kind Regards,
    Gerardo J

    Hi!
    Thanx for the response, That´s the way I´m implementing it at this moment and is working fine.
    Thanx in Advanced!
    Kind Regards,
    Gerardo J

  • Split-Join, unable to set SOAP:HEADER in OSB at Invoke Service Component.

    Hi Experts,
        i created a Split-join for parallel processing and invoke third party services, but this service requires some mandatory elements in soap:header like WS-Addressing and, WSA-TO and some security infomation, but i don't know  how to pass header in invoke service step. Please help me to setup Header for Invoke services in split join.
    Please help me to resolve this issue.
    Thanks
    Ankit

    see this :https://forums.oracle.com/thread/951618
    not the most fancy way, but you can create some sort of  wrapper proxyservice in front of your business service to make it work

  • For each sample example  in OSB without Split join

    Hi,
    Any body have sample example for For each in OSB without Split join......Thanks in advance

    I know this is an old thread, but I just ran into this same problem. Wow! That's a crappy 'feature'. I wasted 4 hours this morning on this thinking it was me doing something wrong in my xpath, but nope, you need to cast the counter to an int .......
    I hope they fix things like this in the next major release.
    Thanks for the solution.

  • Oracle Service Bus 10.3 - split join how to set header for invoked service

    In Oracle Service Bus 10.3 how can I set the header for the service being invoked. We make parallel calls to 2 different business services. One of the invoked service requires header to be set and I am unable to figure out how it can be done. Below are snippet of the code and WSDL.
    --- Login Operation start ---
    <operation name="login">
    <wsdlsoap:operation soapAction="blah"/>
    <input name="loginRequest">
    <wsdlsoap:body use="literal"/>
    <wsdlsoap:header message="passport:loginHeader" part="hppwsHeaderElement" use="literal"/>
    </input>
    <output name="loginResponse">
    <wsdlsoap:body use="literal"/>
    </output>
    <fault name="genericFaultException">
    <wsdlsoap:fault name="genericFaultException" use="literal"/>
    </fault>
    </operation>
    --- Login Operation end ---
    --- hppwsHeader Element --
    <complexType name="hppwsHeaderElement">
    <sequence>
    <element maxOccurs="1" minOccurs="0" name="version" type="tns1:version"/>
    <element maxOccurs="1" minOccurs="0" name="tx-id" type="tns1:tx-id"/>
    <element maxOccurs="1" minOccurs="1" name="systemLangCode" type="xsd:string"/>
    </sequence>
    </complexType>
    --- LoginRequest Element ---
    <xs:element name="loginRequestElement" type="s0:loginRequestType"/>
    <xs:complexType name="loginRequestType">
    <xs:sequence>
    <xs:element name="userId" minOccurs="1" maxOccurs="1" type="xs:string"/>
    <xs:element name="password" minOccurs="1" maxOccurs="1" type="xs:string"/>
    </xs:sequence>
    </xs:complexType>
    --- LoginResponse Element ---
    <xs:element name="loginResponseElement" type="s0:loginResultType"/>
    <xs:complexType name="loginResultType">
    <xs:sequence>
    <xs:element name="sessionToken" minOccurs="1" maxOccurs="1" type="xs:string"/>
    </xs:sequence>
    </xs:complexType>
    In Oracle Workshop for WebLogic when I create a split-join .flow file while adding the invoke service call to login operation I am prompted to create the loginRequest and loginResponse variables. I can assign the appropriate expression to loginRequest.loginRequestElement prior to making the invoke call but then the backend business call fails because "systemLangCode" is not defined and set. Actual fault is
    <ns1:genericFault xmlns:ns1="http://hppcbl.globalops.company.com/webservice">
    <systemLangCode>en</systemLangCode>
    <fault>
    <ruleNumber>589</ruleNumber>
    <fieldName>systemLangCode</fieldName>
    <code>field.empty</code>
    <desc>System language code is required.</desc>
    <ftype>2</ftype>
    </fault>
    </ns1:genericFault>
    I would really appreciate if someone could guide me on how to resolve this
    Regards,
    -Nilay

    There is this $header variable which you should populate before calling the BS. What is the type of BS? If it is WSDL BS , Any Soap BS then above solution will work. I assume that yours is WSDL based BS and setting $header should resolve this issue.
    AnyXML and Messaging type BS services requires that you create proper pay load (setting $header will not work).
    There is also other actions Set Transport Headers {outbound request/inbound response} which can be used to set transport related headers but not soap headers.
    Manoj

  • How Can i retain the Shared Variable Values after PC rebooting

    Hi all,
    I am facing a paculiar problem with Shared Variables. I have an application in which shared variables are used for data communication.
    One of the application requirement is to retain the variable values eventhough PC is rebooted or started after crashing. 
    As per the my understanding, the variable values will retain eventhough the PC is rebooted. But here i can observe a paculiar problem like some library variables are retaing the values while some others not. I enabled logging for all the variables.
    I tried many ways. like logging enabled, logging disabled, changing variable names, changing process names etc... But i am not getting a consistent behaviour.
    I hope some you can help me in solving this issue.. "How Can i retain the Shared Variable Values after PC rebooting"
    Thanks and Regards,
    Mir

    Hi Blackperl,
    Thanks for the post and I hope your well. 
    What do you mean by not getting consistent behaviour.. this will all depend on excatly when the crash happens i.e. before the write or after. 
    Surely a better method would be to log the data to a file during the reboot...
    I beleived the value read back
    will be the default value for the shared variable's data type.
    The LabVIEW DSC 8.0 module adds more functionality to the shared variable, including initial values and alarms.
    If you enable an initial value on a shared variable, when the variable
    engine comes back on-line it will default to this value. Setting a bad
    status alarm for the shared variable is also a good way of handling
    this type of event. Additionally, if you are using a LabVIEW Real-Time
    target such as Compact RIO or Compact FieldPoint, it is appropriate to
    consider hosting the shared variable engine on the real-time target.
    These devices have watch-dog capabilities and are typically the
    hardware controlling the critical pieces of an application. Most
    Windows or PC-based targets do not have these fail-safes.
    I guess, if you could explain to me again that would be great. From my point of view, if I have a cRIO and a Windows PC. If the windows PC crashes, the cRIO will still update its shared variables. Then once the PC has started up its own shared variable engine, and the bindings are loaded, it will once again continue to update its copies of the variables.
    Please let me know what you think,
    Kind Regards,
    James.
    Kind Regards
    James Hillman
    Applications Engineer 2008 to 2009 National Instruments UK & Ireland
    Loughborough University UK - 2006 to 2011
    Remember Kudos those who help!

  • Manipulating condition value after being returned from IPC

    Hi all,
    How can we manipulate the condition rate data after the value is returned from IPC?
    We tried using CRM_PRICING_I_BADI calling the method CRM_PRICING_I_MERGE. But it did not solve the issue.
    Requirement is to read the data of a particular condition type from a preceedign document and then overwirte the conditon value of condition type in the current transaction with that old value from previous document.
    Can this be achieved without using Java coding and manipulate the value after IPC has returned the conditon value and before it is being presented on GUI?
    Please help me with your suggestions.
    Regards,
    David.

    Hello david,
    You might ned to use the user Exit provided by the Pricing Engine to work this out. this will require Java coding.
    Regards,
    Tanu

  • Dynamic Split Join:Parallel flow using OSB

    Hi,
    I am implementing a dynamic split join in OSB,where in the for -loop i am invoking a database adapter.
    If I select parallel='yes' in the for-loop settings, I get a random number of records from the database as an output.
    While on the other hand, on running the for-loop sequentially, i get the exact number of records i am expecting.
    Could anybody figure out why is this happening?
    Regards,
    Tarun

    If I understand correctly, this is what you are doing:
    Configure a For loop based on a repeating element in source XML (for ex. for each customer id in xml message).
    Inside each loop you are making a DB lookup and getting one record for each element (for ex. customer details of each customer id)
    Finally you are aggregating them in the same variable (join)
    The problem that you see is that if you do it in parallel then you do not see details of all customers in the out variable?
    If yes, then can you please let me know how you are updating the details of each record in the out variable.

Maybe you are looking for

  • HT4354 My sleep/wake button suddenly stopped working. Is this a common occurance in ipod nano's 6th generation?

    Recently I was listening to my music, and when I went to change to a different song, I wasn't able to wake my ipod with the sleep/wake button. It's like it's not even there anymore. And when I shake my ipod I hear this rattling sound, which i'm prett

  • Is it possible to use an external hard drive as the windows partition with boot camp?

    I am looking to get a Macbook Pro adn was researchin the different software advantages over PC and found a program called oot Camp that allows you to run Windows on your Mac. I thought that this was interesting as it was sort of the best of both worl

  • Form fields with multi line not printing

    HI All, I created a form on Acrobat 9 pro, some of the fields in this form have the Multiline and Scrolling text option, now when the user fills the form and the text goes on multiple lines when it needs to print the text it doesn't print everything

  • APEX_LIST.SELECT_ITEM() issue

    Hi all, I'm new to Apex. I'm having a problem when I want to download a CSV report from an interactive report, the thing here is that the interactive report has this SQL query code in its region source: select APEX_ITEM.SELECT_LIST(1,'Y','Yes;Y,No;N'

  • Spaces site template strange behavior

    dear all i have a strange site template behavior i have webcenter spaces application and i develop a custom site template for it and make it default every thing goes fine but suddenly the portal change its template to the default spaces template not