cancel
Showing results for 
Search instead for 
Did you mean: 

Publication in Error on property-value pair SI_ENDTIME vs SI_STARTTIME

kelly_monterosso
Explorer
0 Kudos
1,163

Property-value pair (SI_ENDTIME, Tue Jun 20 16:54:55 EDT 2023) contradicts (SI_STARTTIME, Mon Aug 07 07:53:13 EDT 2023). Resolve the contradiction. (FWM 02042)

The publication will not run due to the above error. This started out of nowhere. We have tried rebooting the servers, rescheduling the publication from scratch, and the same error happens. Other publications are running as expected.

Each piece of the publication run with no issues. The SI_ENDTIME and SI_STARTTIME contradictions are not even part of the publication. In addition, the time frame for these two properties is out of order.

How can I clear the SI_STARTTIME and SI_ENDTIME contradictions?

View Entire Topic
ChrisRutherford
Explorer
0 Kudos

SOLUTION FOUND - At the bottom of this post.

Same issue here, the full error is:

2024-10-31 08:00:19,500 ERROR [PublishingService:RunInstancePool-3546] BusinessObjects_PublicationAdminLog_Instance_2795367 - [Publication ID # 2795367] - An exception was caught while fetching dynamic recipients data. Did you properly configure your publication? (FBE60311)
com.crystaldecisions.sdk.exception.SDKException$ContradictingValues: Property-value pair (SI_ENDTIME, Wed Oct 30 16:07:02 NZDT 2024) contradicts (SI_STARTTIME, Thu Oct 31 07:00:19 NZDT 2024). Resolve the contradiction. (FWM 02042)

Note that there are two parts of the error.  One part complaining about the dynamic recipients and the second complaining about the time contradiction.  I think the time contradiction is the main cause and the error about dynamic recipients is just a symptom.

Oddly enough we had 14 publications fail, which impacted about 30 report instances (i.e. 1 publication having a few reoccurring schedules).  The interesting thing is that the value for SI_ENDTIME is the same across all report failed instances regardless of publication.  That makes me think the error is not just caused by a particular report.  Something common to all failed instances could be the troublemaker.

The SI_STARTTIME value is different for all the instances, but I do note that it's an hour behind when the instance is actually run.  We had our daily light savings a couple of weeks ago where our clocks went forward an hour.  However, if that was going to cause the trouble, you'd think it would have manifested before now.  I double checked the server time, it is correct.

We have a bunch of other publications, but they've all ran fine.  I don't yet see the reason why the publications failed and yet some still continue to run.

I've tried the following things:

1. Re-running the failed instance, still fails.

2. Creating a new reoccurring instance from the publication with the same particulars, still fails.

3. Creating a brand-new publication from the same Crystal Report, still fails.

4. Opening up the master Crystal Report (that the publication is based on), saving it as a different Crystal Report.  Then created a new publication based on the new Crystal Report.  From there I created a recurring instance on the new publication, still fails.

5. Restarting Apache Tomcat and Server Intelligence Agent to effectively reboot our SAP BOE environment without having to do a server restart.

6. Thought it might be the dynamic recipient's part of the error, so I created a new publication to use a different source (i.e. Crystal Report or Webi Doc) for dynamic recipients, still fails.

7. Changed the publication recurring instance to use just 1 dynamic recipient rather than the 6 that it was originally using, still fails.

8. Signed into the AdminTools (Query Builder) and looked up the publication ID shown in the error message.  The Query Builder constructed the following query which I then executed:

SELECT * FROM CI_INFOOBJECTS WHERE SI_ID = 2795367

There are two instances of SI_ENDTIME in the full results, but the values don't match the SI_ENDTIME of Wed Oct 30 16:07:02 NZDT 2024 referenced in all the log files of every failed instance.

SOLUTION

Turns out the failure was with a shared Crystal Report responsible for distribution.  When you set up a publication for dynamic recipients, you choose a source for the dynamic recipients.  That source in our environment is either a Crystal Report or a Webi Document.

The Crystal Report that we were using to control our dynamic recipients was created 10 years ago, yesterday.  When looking up that Crystal Report in the AdminTools, I could see that the SI_ENDTIME was 2024-10-30 4:07:02 PM which is why all publications which relied on this Crystal Report failed this morning, 2024-10-31.

I don't have the SDK to correct this SI_ENDTIME on the problem Crystal Report.  I had to take a copy of that Crystal Report and save it with a different name.  From there I updated the failing publications to use the new distribution Crystal Report.  It'll expire in 10 years I imagine, hopefully we'll have another delivery mechanism by then!

I've attached a picture showing the output from the AdminTools which shows the SI_ENDTIME of the distribution Crystal Report.

ChrisRutherford
Explorer
0 Kudos

Okay I've finally got a SAP S-user ID account so I could look at the KB article that was linked in the below post:

2343089 - How to change the SI_ENDTIME property of an InfoObject - SAP for Me

This solution is the be...

Symptom

How do I change the SI_ENDTIME property of an InfoObject using the SDK.

Environment

  • SAP BusinessObjects Business Intelligence platform 4.x

    Resolution

    To run this sample:

    1. Copy the attached sample jsp into the AdminTools folder of your Enterprise server (e.g. C:\Program Files (x86)\SAP BusinessObjects\tomcat\webapps\AdminTools)
    2. Edit the jsp page and enter the correct logon credentials and server name for your Enterprise system

If needed, modify the Infostore query to only return back the desired reports.

e.g.
To only update a single report with SI_ID 12345
boInfoObjects = (IInfoObjects)infoStore.query("Select * FROM CI_INFOOBJECTS where SI_ID=12345 And SI_ID > " + max_id +  " ORDER BY SI_ID ASC");

To modify all instances of a report with SI_ID 12345
boInfoObjects = (IInfoObjects)infoStore.query("Select * FROM CI_INFOOBJECTS where SI_INSTANCE=1 AND SI_PARENTID=12345 And SI_ID > " + max_id +  " ORDER BY SI_ID ASC");

Run the sample by opening a browser window and going to http://myServer:8080/AdminTools/changeEndTime.jsp

Keywords

SI_ENDTIME, infoobject query error modify

The file that the above guide references is called changeEndTime.JSP.  Note - make sure you change the date in the file below to be further out in time based on your needs.  I set mine to 2040.  If we're still using this version of BOE in 16 years I'd be surprised!!

The content of that file is:

<%@ page import = "com.crystaldecisions.sdk.exception.SDKException,
                   com.crystaldecisions.sdk.framework.*,
                   com.crystaldecisions.sdk.occa.infostore.*,
				   com.crystaldecisions.sdk.properties.*,
                   java.util.*"
%><%

// User Credentials
String username = "Administrator";
String password = "Password1";
String cmsname  = "localhost";
String authType = "secEnterprise";

IEnterpriseSession enterpriseSession  = null;
IInfoStore infoStore;
IInfoObjects boInfoObjects; 
  
enterpriseSession = CrystalEnterprise.getSessionMgr().logon(username, password, cmsname, authType);
infoStore = (IInfoStore)enterpriseSession.getService("", "InfoStore");

int max_id = 0;

	for(;;) { 
		// Loop through all webi reports on the system
        boInfoObjects = (IInfoObjects)infoStore.query("Select * FROM CI_INFOOBJECTS where SI_ID=5651 And SI_ID > " + max_id +  " ORDER BY SI_ID ASC");
                                               
        if(boInfoObjects.size() == 0) 
            break;

		for(Iterator boCount = boInfoObjects.iterator() ; boCount.hasNext() ; ) {
            IInfoObject boReport1 = (IInfoObject)boCount.next();
            
            out.println("Checking Report Instance: " + boReport1.getID() + "<BR>");			
			IProperties tmpProps = boReport1.getSchedulingInfo().properties();
			tmpProps.setProperty("SI_ENDTIME", new java.util.Date("7/13/26 4:15:00 PM"));
			// 2026-09-01 12:00:00

            max_id = boReport1.getID();
        }
		infoStore.commit(boInfoObjects);            
	}
	out.println("Job Completed");
%>