Esempio: programmare un report

Pianificare l'esecuzione di un report a un'ora specifica o a intervalli ricorrenti. Ad esempio, potrebbe essere necessario eseguire un report ogni giorno o in orari non di punta.

Per programmare un report utilizzando il Software Development Kit, creare un oggetto schedule e impostare i valori appropriati per le sue proprietà. Quindi, utilizzare il metodo add(parentPath, objects, options) per aggiungerlo all'archivio dei contenuti.

Questi esempi di codice mostrano come programmare un report. Ad esempio, alcuni gruppi dell'organizzazione potrebbero aver bisogno dei dati di un report aggiornati al minuto. Per soddisfare questa esigenza, si imposta una vista di report, si pianifica l'esecuzione del report ogni minuto e si verifica che sia stato pianificato correttamente.

Metodi

È possibile utilizzare il metodo add(parentPath, objects, options) per pianificare un rapporto.

Per le autorizzazioni e le capacità necessarie per questo metodo, consultare il capitolo Metodi della Guida per gli sviluppatori del Software Development Kit.

Codice java

Per vedere il codice nel suo contesto, si veda il seguente esempio:

installation_location/sdk/vb/Scheduler/NewScheduler.java

I seguenti frammenti di codice Java™ dimostrano come si può programmare un report.

Passi per un programma Java

  1. Assicurarsi che l'account attualmente connesso abbia una credenziale e ottenere un riferimento a tale credenziale.
    if (! Credentials.hasCredential(connection))
    {
    	Credentials newCred = new Credentials();
    	newCred.addCredential(connection);
    }
    Account logonInfo = Logon.getLogonAccount(connection);
    Credential credential = new Credential();
    StringProp credentialPath = new StringProp();
    String credentialPathString = logonInfo.getSearchPath().getValue();
    credentialPathString = credentialPathString + "/credential[@name='Credential']";
    credentialPath.setValue(credentialPathString);
    credential.setSearchPath(credentialPath);
    BaseClassArrayProp credentials = new BaseClassArrayProp();
    credentials.setValue(new BaseClass[] {credential} );
  2. Impostare la data e l'ora di inizio del programma.
    
    public DateTimeProp setScheduleStartDate(Calendar startOnDate)
    {
    	DateTimeProp startDate = new DateTimeProp();
    	//If start date not passed set to today/now
    	if (startOnDate != null)
    		startDate.setValue(startOnDate);
    	else
    		startDate.setValue(Calendar.getInstance());
    
    	return startDate;
    }
  3. Impostare la data e l'ora di fine della pianificazione.
    
    public DateTimeProp setScheduleEndDate(
    	Calendar endOnDate,
    	String endOnTime)
    {
    	DateTimeProp endDate = new DateTimeProp();
    	if (endOnTime.compareToIgnoreCase("onDate") == 0)
    		if (endOnDate != null)
    		{
    			endDate.setValue(endOnDate);
    		}
    		else
    			System.out.println(
    				"Parameter endOnTime cannot be onDate if no enddate provided");
    	return endDate;
    }
    
    public NmtokenProp setScheduleEndTime(String endOnTime)
    {
    	NmtokenProp endTime = new NmtokenProp();
    	if (endOnTime != null)
    	{
    		endTime.setValue(endOnTime);
    	}
    	else
    		System.out.println(
    			"Parameter endOnTime cannot be null! Options: indefinite or onDate");
    	return endTime;
    }
  4. Assegna all'utente corrente il ruolo di proprietario.
    
    BaseClass[] owners = new BaseClass[] { Logon.getLogonAccount(connection) };
    BaseClassArrayProp ownersProp = new BaseClassArrayProp();
    ownersProp.setValue(owners);
  5. Impostare le opzioni.
    
    OptionArrayProp roap = new OptionArrayProp();
    String reportPath = report.getBaseClassObject().getSearchPath().getValue();
    
    //Set options
    roap.setValue(
    	this.setSchedulerOptions(
    		outFormat,
    		delivery,
    		reportPath,
    		printerName,
    		saveasName,
    		pageOrientation,
    		paper,
    		emails,
    		connection));
    ...
    RunOptionSaveAs saveAs = new RunOptionSaveAs();
    MultilingualToken[] obj = new MultilingualToken[1];
    
    //Set the name of the reportView
    obj[0] = new MultilingualToken();
    obj[0].setLocale("en-us");
    
    //If no name provided use default
    if (saveasName != null)
    {
    	obj[0].setValue(saveasName);
    }
    else
    {
    	obj[0].setValue("View of Report " + reportPath);
    }
    
    //Save the object as report view with name saveasName
    saveAs.setName(RunOptionEnum.saveAs);
    saveAs.setObjectClass(ReportSaveAsEnum.reportView);
    saveAs.setObjectName(obj);
    saveAs.setParentSearchPath(csh.getParentPath(connection, reportPath));
  6. Impostare le proprietà dell'oggetto schedule e aggiungerlo al report.
    newSchedule.setActive(isActive);
    newSchedule.setCredential(credentials);
    newSchedule.setEndDate(this.setScheduleEndDate(endOnDate, endOnTime));
    newSchedule.setEndType(this.setScheduleEndTime(endOnTime));
    newSchedule.setOwner(ownersProp);
    newSchedule.setParameters(pv);
    newSchedule.setOptions(roap);
    newSchedule.setStartDate(this.setScheduleStartDate(startOnDate));
    newSchedule.setType(howOften);
    
    //  add the schedule to the report
    AddOptions ao = new AddOptions();
    ao.setUpdateAction(UpdateActionEnum.replace);
    BaseClass newBc = connection.getCMService().add(
    	new SearchPathSingleObject(reportPath),
    	new BaseClass[] { newSchedule },
    	ao)[0];

Codice C#

Per vedere il codice nel suo contesto, si veda il seguente esempio:

posizione_di_installazione/sdk/csharp/Schedule/Schedule.cs

Prima di poter utilizzare questo esempio, è necessario creare un oggetto credenziale per l'account che verrà utilizzato per eseguire l'esempio. Per ulteriori informazioni sulla creazione di credenziali, consultare la Guida all'amministrazione e alla sicurezza.

I seguenti frammenti di codice C# dimostrano come si può programmare un report.

Passi per un programma C#

  1. Assicurarsi che l'account attualmente connesso abbia una credenziale e ottenere un riferimento a tale credenziale.
    
    //get the credential for the schedule
    credential schedCred = connection.getCredential();
    baseClassArrayProp credentials = new baseClassArrayProp();
    credentials.value = new baseClass[] {schedCred};
    newSched.credential = credentials;
  2. Impostare le date e gli orari di inizio e fine del programma.
    // set schedule time to now + 2 minutes
    System.DateTime startTime = new DateTime();
    startTime = DateTime.Now;
    startTime = startTime.AddMinutes(2);
    dateTimeProp schedStartTime = new dateTimeProp();
    schedStartTime.value = startTime;
    newSched.startDate = schedStartTime;
    
    // set schedule end time to now + 5 minutes
    System.DateTime endTime = new DateTime();
    endTime = DateTime.Now;
    endTime = endTime.AddMinutes(5);
    dateTimeProp schedEndTime = new dateTimeProp();
    schedEndTime.value = endTime;
    newSched.endDate = schedEndTime;
    
    // set the schedule end type
    nmtokenProp endType = new nmtokenProp();
    endType.value = "onDate";
    newSched.endType = endType;
  3. Assegna all'utente corrente il ruolo di proprietario.
    //set the owner
    baseClassArrayProp ownersProp = new baseClassArrayProp();
    baseClass[] owners = new baseClass[]
    	{ SamplesConnect.getLogonAccount(connection) };
    ownersProp.value = owners;
    newSched.owner = ownersProp;
  4. Impostare le opzioni.
    //Set the name of the reportView
    multilingualToken[] reportViewName = new multilingualToken[1];
    reportViewName[0] = new multilingualToken();
    reportViewName[0].locale = "en-us";
    reportViewName[0].value = "View of Report " +
    	reportToSchedule.baseclassobject.defaultName.value;
    
    //Save the output as report view with name saveasName
    runOptionSaveAs saveAs = new runOptionSaveAs();
    saveAs.name = runOptionEnum.saveAs;
    saveAs.objectClass = reportSaveAsEnum.reportView;
    saveAs.objectName = reportViewName;
    saveAs.parentSearchPath = reportToSchedule.parentPath.value;
    
    //Turn off prompting
    runOptionBoolean prompt = new runOptionBoolean();
    prompt.name = runOptionEnum.prompt;
    prompt.value = false;
    
    //set the output format
    runOptionStringArray format = new runOptionStringArray();
    format.name = runOptionEnum.outputFormat;
    format.value = new string[] { "HTML" };
    
    //put the run options where they need to go
    runOption[] schedRunOptArr = new runOption[3];
    schedRunOptArr[0] = saveAs;
    schedRunOptArr[1] = prompt;
    schedRunOptArr[2] = format;
    
    runOptionArrayProp schedRunOptions = new runOptionArrayProp();
    schedRunOptions.value = schedRunOptArr;
    newSched.runOptions = schedRunOptions;
  5. Impostare le proprietà dell'oggetto schedule e aggiungerlo al report.
    //mark the schedule as active
    booleanProp isActive = new booleanProp();
    isActive.value = true;
    newSched.active = isActive;
    
    //Set the type of schedule
    cognosdotnet_10_2.nmtokenProp scheduleType = new nmtokenProp();
    scheduleType.value = "daily";
    newSched.type = scheduleType;
    		
    //make the schedule for every x minutes
    nmtokenProp period = new nmtokenProp();
    period.value = "minute";
    newSched.dailyPeriod = period;
    
    //set that every x minutes to be every 1 minute
    positiveIntegerProp runFreqProp = new positiveIntegerProp();
    runFreqProp.value = "1";
    newSched.everyNPeriods = runFreqProp;
    ...
    searchPathSingleObject reportSearchPath = new searchPathSingleObject();
    reportSearchPath.Value =
    	((baseClass) reportToSchedule.baseclassobject).searchPath.value;
    //  add the schedule to the report
    addOptions ao = new addOptions();
    ao.updateAction = updateActionEnum.replace;
    baseClass newBc = connection.CBICMS.add(
    	reportSearchPath,
    	new baseClass[] { newSched },
    	ao)[0];

Spiegazione

Per creare la pianificazione, si crea prima un oggetto schedule e si specificano i valori delle sue proprietà. Di seguito sono riportati alcuni esempi di proprietà che possono essere specificate:

  • active
  • credential
  • dailyPeriod
  • endDate
  • endType
  • everyNPeriods
  • options
  • startDate

Per un elenco completo e una descrizione delle proprietà, vedere la descrizione della classe schedule nel capitolo sulle classi della Software Development Kit Developer Guide.

Se il report contiene richieste, è necessario specificare anche i parametri nella proprietà parameters .

Il programma in un array schedule viene passato al metodo add(parentPath, objects, options) e il programma viene creato nell'archivio dei contenuti.

Passi da compiere per scrivere i propri programmi

  1. Crea un array di oggetti schedule .
  2. Creare un nuovo oggetto schedule .
  3. Creare un nuovo oggetto addOptions .
  4. Creare un oggetto dateTimeProp per la data e l'ora di inizio dell'oggetto schedule e impostare il suo valore sulla data e l'ora di inizio richieste. Assegnare questo oggetto dateTimeProp alla proprietà startDate del programma previsionale.
  5. Costruire un array di oggetti option per l'oggetto schedule . Queste opzioni si applicano ogni volta che viene eseguito il rapporto pianificato. Assegnare questa matrice alla proprietà value della proprietà options dell'oggetto schedule .
  6. Impostare i valori delle altre proprietà dell'oggetto schedule .
  7. Aggiungere l'oggetto schedule all'array schedule .
  8. Impostare i valori desiderati per le proprietà dell'oggetto addOptions .
  9. Richiamare il metodo add(parentPath, objects, options) , passando come parametri il percorso di ricerca, l'array schedule e l'oggetto addOptions .