/// <summary> /// Calculates the client report from cached result. /// </summary> /// <returns></returns> public string CalcClientReportFromCachedResult() { int count = this.ClientReports.Count; string xslString = string.Empty; TimeSpan timeInterval = DateExtensions.TimeIntervalSinceReferenceDate(DateTime.UtcNow); if (!string.IsNullOrEmpty(this.XslName)) { //string xslFileName = ServerSession.CurrentSession.FileStore.ImagePathForName(this.XslName); //xslFileName = xslFileName.StringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding); //xslString = $"<?xml-stylesheet type=\"text/xsl\" href=\"{xslFileName}?time={timeInterval}\"?>"; } UPXmlMemoryWriter writer = new UPXmlMemoryWriter(); if (!string.IsNullOrEmpty(this.RootXmlName)) { writer.WriteElementStart(this.RootXmlName); } else { writer.WriteElementStart("Results"); } for (int i = 0; i < count; i++) { object result = this.resultsForClientReports[i]; if (result != null) { UPWebContentClientReport clientReport = this.ClientReports[i]; ((UPCRMResult)result).SerializeRootElementName(writer, clientReport.RootNodeName); } } //for (int j = 0; j < signatureImageTagNames.Count && j < signaturePathNames.Count; j++) //{ // writer.WriteElementValue(signatureImageTagNames[j], $"{signaturePathNames[j]}?time={timeInterval}"); //} writer.WriteLocaleSettingsElement(); writer.WriteElementEnd(); return($"<?xml version=\"1.0\" encoding=\"UTF-8\"?>{xslString}{writer.XmlContentStringAmpDecoded()}"); }
private bool ComputeNextReport() { if (this.ClientReports.Count <= this.nextClientReport) { this.BuildXml(); this.blockStart = false; return(true); } IConfigurationUnitStore configStore = ConfigurationUnitStore.DefaultStore; UPWebContentClientReport report = this.ClientReports[this.nextClientReport]; SearchAndList searchAndList = configStore.SearchAndListByName(report.ConfigName); FieldControl tmpFieldControl = searchAndList == null ? configStore.FieldControlByNameFromGroup("List", report.ConfigName) : configStore.FieldControlByNameFromGroup("List", searchAndList.FieldGroupName); if (tmpFieldControl == null) { this.nextClientReport++; return(this.ComputeNextReport()); } this.crmQuery = new UPContainerMetaInfo(tmpFieldControl); if (!string.IsNullOrEmpty(this.recordIdentification)) { int _linkId = this.linkId; if (report.ExplicitLinkId) { _linkId = report.LinkId; } if (string.IsNullOrEmpty(report.ParentLinkConfig)) { this.crmQuery.SetLinkRecordIdentification(this.recordIdentification, _linkId); } else if (report.ParentLinkConfig != "nolink") { string linkRecordIdentification = this.parentLinkDictionary.ValueOrDefault(report.ParentLinkConfig); if (linkRecordIdentification == null) { this.linkReader = new UPCRMLinkReader(this.recordIdentification, report.ParentLinkConfig, this); this.linkReader.Start(); return(true); } if (!string.IsNullOrEmpty(linkRecordIdentification)) { this.crmQuery.SetLinkRecordIdentification(linkRecordIdentification, _linkId); } } } if (!string.IsNullOrEmpty(searchAndList?.FilterName)) { UPConfigFilter filter = configStore.FilterByName(searchAndList.FilterName); filter = filter?.FilterByApplyingValueDictionaryDefaults(this.filterParameters, true); if (filter != null) { this.crmQuery.ApplyFilter(filter); } } this.crmQuery.Find(this.RequestOption, this); return(true); }
/// <summary> /// Updates the metadata with view reference. /// </summary> /// <param name="viewReference">The view reference.</param> public override void UpdateMetadataWithViewReference(ViewReference viewReference) { base.UpdateMetadataWithViewReference(viewReference); string jsonString = viewReference.ContextValueForKey("SigningConfig"); if (!string.IsNullOrEmpty(jsonString)) { Dictionary <string, object> defaultConfigDict = "{\"sign\": true, \"upload\": true, \"emptySignatureName\": \"Button:PleaseSign\", \"signatureImageTagName\": \"SignatureImage\", \"signatureImageId\": \"img-signature\", \"signedReportFileName\": \"SampleReport.pdf\", \"signedReportFileNameDateFormat\": \"yyyy-MM-dd\"}".JsonDictionaryFromString(); Dictionary <string, object> tempDict = new Dictionary <string, object>(defaultConfigDict); foreach (var entry in jsonString.JsonDictionaryFromString()) { tempDict[entry.Key] = entry.Value; } this.SigningConfig = new Dictionary <string, object>(tempDict); } else { this.SigningConfig = null; } if (this.SigningConfig != null) { this.PdfFileName = this.SigningConfig.ValueOrDefault("signedReportFileName") as string; this.PdfFileNameDateFormat = this.SigningConfig.ValueOrDefault("signedReportFileNameDateFormat") as string; this.SignatureImageId = this.SigningConfig.ValueOrDefault("signatureImageId") as string; this.SignatureTitle = this.SigningConfig.ValueOrDefault("signatureTitle") as string; this.signatureImageTagNames = ((string)this.SigningConfig["signatureImageTagName"]).Split(';').ToList(); //this.WithSignature = this.SigningConfig.BoolValueForKeyTheDefault("sign", true); //this.UploadReport = this.SigningConfig.BoolValueForKeyTheDefault("upload", true); this.signaturePathNames = new List <string>(); IFileStorage fileStore = ServerSession.CurrentSession.FileStore; var emptySignatureNames = ((string)this.SigningConfig["emptySignatureName"]).Split(';'); for (int i = 0; i < emptySignatureNames.Length; i++) { string emptySignatureName = emptySignatureNames[i]; string languageEmptySignatureName = $"{emptySignatureName}_{ServerSession.CurrentSession.LanguageKey}"; //string languageEmptySignaturePathName = fileStore.ImagePathForName(languageEmptySignatureName); //string emptySignaturePathName = languageEmptySignaturePathName ?? fileStore.ImagePathForName(emptySignatureName); //string signatureFileName = NSString.StringWithFormat("signature-%lu.%@", i, emptySignaturePathName.PathExtension()); //string signaturePathName = fileStore.BaseDirectoryPath().StringByAppendingPathComponent(signatureFileName); //if (!string.IsNullOrEmpty(emptySignaturePathName)) //{ // NSFileManager.DefaultManager().RemoveItemAtPathError(signaturePathName, null); // NSFileManager.DefaultManager().CopyItemAtPathToPathError(emptySignaturePathName, signaturePathName, null); //} //signaturePathNames.AddObject(signaturePathName); } } string configParentLink = viewReference.ContextValueForKey("ConfigParentLink"); UPWebContentClientReport clientReport = new UPWebContentClientReport(viewReference.ContextValueForKey("ConfigName"), viewReference.ContextValueForKey("RootName"), configParentLink); string additionalConfigNames = viewReference.ContextValueForKey("AdditionalConfigNames"); string additionalRootNames = viewReference.ContextValueForKey("AdditionalRootNames"); if (!string.IsNullOrEmpty(additionalConfigNames)) { string additionalConfigParentLinkString = viewReference.ContextValueForKey("AdditionalConfigParentLinks"); string[] additionalConfigParentLinks = null; var configNameParts = additionalConfigNames.Split(';'); if (!string.IsNullOrEmpty(additionalConfigParentLinkString)) { additionalConfigParentLinks = additionalConfigParentLinkString.Split(';'); } string[] rootNameParts = null; if (!string.IsNullOrEmpty(additionalRootNames)) { rootNameParts = additionalRootNames.Split(';'); } int count = configNameParts.Length; List <UPWebContentClientReport> clientReportArray = new List <UPWebContentClientReport>(count + 1); clientReportArray.Add(clientReport); for (int i = 0; i < count; i++) { string parentLinkConfig = null; if (additionalConfigParentLinks?.Length > i) { parentLinkConfig = additionalConfigParentLinks[i]; } clientReport = new UPWebContentClientReport(configNameParts[i], rootNameParts?.Length > i ? rootNameParts[i] : null, parentLinkConfig); clientReportArray.Add(clientReport); } this.ClientReports = clientReportArray; } else { this.ClientReports = new List <UPWebContentClientReport> { clientReport }; } this.RootXmlName = viewReference.ContextValueForKey("XmlRootElementName"); this.XslName = viewReference.ContextValueForKey("Xsl"); this.RequestOption = UPCRMDataStore.RequestOptionFromString(viewReference.ContextValueForKey("RequestOption"), UPRequestOption.FastestAvailable); this.RequestOptionDependentOnRoot = viewReference.ContextValueIsSet("RequestOptionDependentOnRoot"); if (this.RequestOptionDependentOnRoot && this.TheDelegate.IsOnline) { this.RequestOption = UPRequestOption.Online; } }