예제 #1
1
파일: CrmCalls.cs 프로젝트: Phil-Ruben/CRM
        public static void SavedQueries(XrmServiceContext svcContext)
        {
            QueryExpression mySavedQuery = new QueryExpression
            {
                ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
                EntityName = SavedQuery.EntityLogicalName,
                Criteria = new FilterExpression
                {
                    Conditions =
                    {
                        new ConditionExpression
                        {
                            AttributeName = "querytype",
                            Operator = ConditionOperator.Equal,
                            Values = {0}
                        },
                        new ConditionExpression
                        {
                            AttributeName = "returnedtypecode",
                            Operator = ConditionOperator.Equal,
                            Values = {SalesOrder.EntityTypeCode}
                        }
                    }
                }
            };
            RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };

            RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)svcContext.Execute(retrieveSavedQueriesRequest);

            DataCollection<Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;

            using (StreamWriter sw = new StreamWriter(crmPath + "SavedQueries.txt"))
            {
                //Display the Retrieved views
                String oo = "Open Orders (Support)";
                SavedQuery sq = new SavedQuery();
                sw.WriteLine("rsq.SavedQueryId;rsq.Name;rsq.QueryType;rsq.IsDefault;rsq.ReturnedTypeCode;rsq.IsQuickFindQuery");
                foreach (Entity ent in savedQueries)
                {
                    SavedQuery rsq = (SavedQuery)ent;
                    sw.WriteLine("{0};{1};{2};{3};{4};{5}", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
                    if (rsq.Name.Equals(oo))
                        sq = rsq;
                }
                sw.WriteLine("*****************");
                sw.WriteLine("FetchXml: " + sq.FetchXml);
                sw.WriteLine("ColumnSetXml: " + sq.ColumnSetXml);
                //sw.WriteLine("CreatedBy: " + sq.CreatedBy.Name);
                sw.WriteLine("Description: " + sq.Description);
                sw.WriteLine("QueryAPI: " + sq.QueryAPI);
                sw.WriteLine("ReturnedTypeCode: " + sq.ReturnedTypeCode);

                ExecuteByIdSavedQueryRequest executeSavedQueryRequest = new ExecuteByIdSavedQueryRequest()
                {
                    EntityId = sq.Id
                };

                // Execute the request
                sw.WriteLine("  Executing Saved Query");
                ExecuteByIdSavedQueryResponse executeSavedQueryResponse =
                    (ExecuteByIdSavedQueryResponse)svcContext.Execute(executeSavedQueryRequest);

                // Check results
                if (String.IsNullOrEmpty(executeSavedQueryResponse.String))
                    throw new Exception("Saved Query did not return any results");

                sw.WriteLine(executeSavedQueryResponse.String);

            }
        }
        public async Task <IActionResult> SaveQuery([FromBody] JQQueryBuilderSavedQuery query)
        {
            try
            {
                var savedQueryEntityType = SavedQueryEntityType.Person;

                var savedQuery = await savedQueryRepository.Value.FindOneAsync(x => x.Type == savedQueryEntityType && x.Name == query.Name);

                var isNew = false;
                if (savedQuery == null)
                {
                    isNew      = true;
                    savedQuery = new SavedQuery
                    {
                        Type  = savedQueryEntityType,
                        Name  = query.Name,
                        Query = query.Query,
                    };
                    await savedQueryRepository.Value.InsertAsync(savedQuery);
                }
                else
                {
                    savedQuery.Query = query.Query;
                    await savedQueryRepository.Value.UpdateAsync(savedQuery);
                }

                return(Json(new { Success = true, QueryId = savedQuery.Id, Name = savedQuery.Name, IsNew = isNew }));
            }
            catch (Exception x)
            {
                return(Json(new { Success = false, Message = x.GetBaseException().Message }));
            }
        }
예제 #3
0
        public IEnumerable <SelectListItem> SavedQueries()
        {
            if (!SavedQueryVisible)
            {
                return(null);
            }
            string uname = Util.UserName;
            var    g     = new Guid();

            if (SavedQuery.HasValue() && SavedQuery.Contains(":"))
            {
                var lines = SavedQuery.Split(":".ToCharArray(), 2);
                Guid.TryParse(lines[0], out g);
            }
            var q1 = from qb in Db.Queries
                     where qb.Owner == uname
                     orderby qb.Name
                     select new SelectListItem
            {
                Value    = qb.QueryId + ":" + qb.Name,
                Selected = qb.QueryId == g,
                Text     = qb.Name
            };
            var q2 = from qb in Db.Queries
                     where qb.Owner != uname && qb.Ispublic
                     orderby qb.Owner, qb.Name
                select new SelectListItem
            {
                Value    = qb.QueryId + ":" + qb.Name,
                Selected = qb.QueryId == g,
                Text     = qb.Owner + ":" + qb.Name,
            };

            return(q1.Union(q2));
        }
예제 #4
0
        void btnSave_Click(object sender, EventArgs e)
        {
            if (txtQuery.Text.Trim().Length == 0)
            {
                lblError.Text = DevTools.NoQueryWarning;
                return;
            }

            if (txtQueryName.Text.Trim().Length == 0)
            {
                lblError.Text = DevTools.QueryNameRequired;
                return;
            }

            SavedQuery q = repository.Fetch(txtQueryName.Text);

            if (q == null)
            {
                q = new SavedQuery();
            }

            q.Statement = txtQuery.Text;
            q.Name      = txtQueryName.Text;
            if (currentUser != null)
            {
                q.LastModBy = currentUser.UserGuid;
            }
            q.LastModUtc = DateTime.UtcNow;
            repository.Save(q);
            RedirectToQuery(q.Id.ToString());
        }
        public ActionResult Save([Bind(Include = "Queries,SavedQueries,Query,Description,Csv")] QueryViewModel qvm)
        {
            SavedQuery savQuery = new SavedQuery();
            // Check for valid Query. Must be SELECT Command, and only has a one semicolon at the end of the query
            string Query = qvm.Query;

            if (Query.Length >= 6 && Query.Substring(0, 6) == "SELECT" &&
                Query.Substring(0, Query.Length - 1) != ";" && Query.Substring(Query.Length - 1, 1) == ";")
            {
                savQuery.Query        = Query;
                savQuery.Description  = qvm.Description;
                savQuery.CreationDate = DateTime.Today;
                db.SavedQueries.Add(savQuery);
                try
                {
                    db.SaveChanges();
                    TempData["SuccessOHMsg"] = "Saved Query " + savQuery.SavedQueryID + " added";
                }
                catch
                {
                    TempData["DangerOHMsg"] = "Problem saving query in the database. Please remember to enter a description before saving.";
                    return(RedirectToAction("Index", qvm));
                }
            }
            else
            {
                TempData["DangerOHMsg"] = "There was a problem with the format of the query";
                return(RedirectToAction("Index", qvm));
            }
            return(Run(qvm));
        }
예제 #6
0
        // Displays the sample product entity records in the browser.
        public void ViewEntityListInBrowser()
        {
            try
            {
                //Get the view ID
                QueryByAttribute query = new QueryByAttribute("savedquery");
                query.AddAttributeValue("returnedtypecode", "sample_book");
                query.AddAttributeValue("name", "Active Sample Books");
                query.ColumnSet = new ColumnSet("savedqueryid", "name");
                query.AddOrder("name", OrderType.Ascending);
                RetrieveMultipleRequest req = new RetrieveMultipleRequest()
                {
                    Query = query
                };
                RetrieveMultipleResponse resp = (RetrieveMultipleResponse)_serviceProxy.Execute(req);

                SavedQuery activeSampleBooksView = (SavedQuery)resp.EntityCollection[0];

                String webServiceURL = _serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Address.Uri.AbsoluteUri;
                String entityInDefaultSolutionUrl = webServiceURL.Replace("XRMServices/2011/Organization.svc",
                                                                          String.Format("main.aspx?etn={0}&amp;pagetype=entitylist&amp;viewid=%7b{1}%7d&amp;viewtype=1039", "sample_book", activeSampleBooksView.SavedQueryId));

                // View in IE
                ProcessStartInfo browserProcess = new ProcessStartInfo("iexplore.exe");
                browserProcess.Arguments = entityInDefaultSolutionUrl;
                Process.Start(browserProcess);
            }
            catch (SystemException)
            {
                Console.WriteLine("\nThere was a problem opening Internet Explorer.");
            }
        }
예제 #7
0
        /// <summary>
        /// Run the code example.
        /// </summary>
        /// <param name="user">The DFP user object running the code example.</param>
        public void Run(DfpUser user, long savedQueryId)
        {
            ReportService reportService = (ReportService)user.GetService(
                DfpService.v201608.ReportService);

            // Set the file path where the report will be saved.
            String filePath = _T("INSERT_FILE_PATH_HERE");

            // Create statement to retrieve the saved query.
            // [START report_guide_include_1] MOE:strip_line
            StatementBuilder statementBuilder = new StatementBuilder()
                                                .Where("id = :id")
                                                .OrderBy("id ASC")
                                                .Limit(1)
                                                .AddValue("id", savedQueryId);

            SavedQueryPage page =
                reportService.getSavedQueriesByStatement(statementBuilder.ToStatement());
            SavedQuery savedQuery = page.results[0];

            if (!savedQuery.isCompatibleWithApiVersion)
            {
                throw new InvalidOperationException("Saved query is not compatible with this API version");
            }

            // Optionally modify the query.
            ReportQuery reportQuery = savedQuery.reportQuery;

            // [END report_guide_include_1] MOE:strip_line
            reportQuery.adUnitView = ReportQueryAdUnitView.HIERARCHICAL;

            // Create a report job using the saved query.
            ReportJob reportJob = new ReportJob();

            reportJob.reportQuery = reportQuery;

            try {
                // Run report.
                reportJob = reportService.runReportJob(reportJob);

                ReportUtilities reportUtilities = new ReportUtilities(reportService, reportJob.id);

                // Set download options.
                ReportDownloadOptions options = new ReportDownloadOptions();
                options.exportFormat                  = ExportFormat.CSV_DUMP;
                options.useGzipCompression            = true;
                reportUtilities.reportDownloadOptions = options;

                // Download the report.
                using (ReportResponse reportResponse = reportUtilities.GetResponse()) {
                    reportResponse.Save(filePath);
                }
                Console.WriteLine("Report saved to \"{0}\".", filePath);
            } catch (Exception e) {
                Console.WriteLine("Failed to run saved query. Exception says \"{0}\"",
                                  e.Message);
            }
        }
예제 #8
0
        private void addViewButton_Click(object sender, EventArgs e)
        {
            Entity     entity      = EntityBindingSource.Current as Entity;
            Guid       atrributeId = entity.EntityId;
            SavedQuery query       = new SavedQuery();

            query.ReturnedTypeId = atrributeId;
            _presenter.ShowSavedQueryDetail(query);
        }
예제 #9
0
        public async Task <IActionResult> Update(SavedQuery model)
        {
            var product = await repository.Value.FindOneAsync(model.Id);

            product.Name = model.Name;
            //product.Query = model.Query;

            await repository.Value.UpdateAsync(product);

            return(Json(new { status = true, redirectUrl = Url.Action("Index") }));
        }
예제 #10
0
        public static void InitializeMockup(TestContext context)
        {
            var tmp = new SavedQuery(); //TODO: Temp fix to ensure BusinessDomain-assembly is loaded before running mockup. Awaits a new mockup-release https://github.com/delegateas/XrmMockup/issues/66

            crm = XrmMockup365.GetInstance(new XrmMockupSettings
            {
                BasePluginTypes           = new Type[] { typeof(DG.XrmOrg.XrmSolution.Plugins.Plugin) },
                CodeActivityInstanceTypes = new Type[] { typeof(AccountCustomActivity) },
                EnableProxyTypes          = true,
                IncludeAllWorkflows       = true
            });
        }
예제 #11
0
        public void ShowSavedQueryDetail(SavedQuery savedQuery)
        {
            var savedQueryDetailView = WorkItem.Items.AddNew <SavedQueryDetailView>();

            savedQueryDetailView.Bind(savedQuery);
            var info = new XtraWindowSmartPartInfo {
                StartPosition = FormStartPosition.CenterParent, Icon = Properties.Resources.ri_Katrin, Modal = true, Title = "View Design"
            };

            WorkItem.Workspaces[WorkspaceNames.ModalWindows].Show(savedQueryDetailView, info);
            BindList();
            savedQueryDetailView.Dispose();
        }
예제 #12
0
 private void PopulateControls()
 {
     BindTableList();
     BindQueryList();
     if (queryId != Guid.Empty)
     {
         SavedQuery q = repository.Fetch(queryId);
         if (q != null)
         {
             txtQuery.Text = q.Statement;
         }
     }
 }
예제 #13
0
        public static void InsertOrUpdateQuery(SavedQuery query)
        {
            var db    = new SQLiteConnection(path);
            var saved = db.Query <SavedQuery>("select * from SavedQuery where Query = ?", query.Query);

            if (saved.Any())
            {
                db.Update(query);
            }
            else
            {
                db.Insert(query);
            }
        }
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SavedQuery savedQuery = db.SavedQueries.Find(id);

            if (savedQuery == null)
            {
                return(HttpNotFound());
            }
            return(View(savedQuery));
        }
예제 #15
0
 private void deleteViewButton_Click(object sender, EventArgs e)
 {
     if (savedQueryBindingSource.Current != null)
     {
         SavedQuery savedQuery = savedQueryBindingSource.Current as SavedQuery;
         if (savedQuery != null)
         {
             string message = "Do you confirm to delete this Entity View?";
             if (XtraMessageBox.Show(message, Properties.Resources.Katrin, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
             {
                 _presenter.DeleteView(savedQuery.SavedQueryId);
             }
         }
     }
 }
        public ActionResult DeleteConfirmed(int id)
        {
            SavedQuery savedQuery = db.SavedQueries.Find(id);

            db.SavedQueries.Remove(savedQuery);
            try
            {
                db.SaveChanges();
                TempData["SuccessOHMsg"] = "Saved Query " + savedQuery.Description + " deleted";
                return(RedirectToAction("Index", "Query", null));
            }
            catch
            {
                TempData["DangerOHMsg"] = "Problem deleting the Saved Query " + savedQuery.Description;
                return(RedirectToAction("Index"));
            }
        }
        // GET: SavedQueryRan/5
        // This function is used to translate an ID into a QVM that can be passed to the Run action
        public ActionResult SavedQueryRan(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SavedQuery savedQuery = db.SavedQueries.Find(id);

            if (savedQuery == null)
            {
                return(HttpNotFound());
            }
            QueryViewModel qvm = new QueryViewModel();

            qvm.SavedQueries = db.SavedQueries.ToList();
            qvm.Query        = savedQuery.Query;
            return(Run(qvm));
        }
예제 #18
0
        private void SerializeResult(SavedQuery sq, PXModel model, HttpContext context)
        {
            var info = PCAxis.Web.Controls.CommandBar.Plugin.CommandBarPluginManager.GetFileType(sq.Output.Type);

            PCAxis.Web.Core.ISerializerCreator creator = Activator.CreateInstance(Type.GetType(info.Creator)) as PCAxis.Web.Core.ISerializerCreator;

            context.Response.ContentType = info.MimeType;
            context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + model.Meta.Matrix + "." + info.FileExtension);

            var serializer = creator.Create(sq.Output.Type);

            using (MemoryStream ms = new MemoryStream())
            {
                serializer.Serialize(model, ms);
                ms.Position = 0;
                ms.WriteTo(context.Response.OutputStream);
            }
        }
        //Unittest to this one
        public string SavedQueryString(SavedQuery sq)
        {
            var resultString = string.Empty;

            foreach (var param in sq.Output.Params)
            {
                resultString = resultString + param.Key + param.Value;
            }

            foreach (var source in sq.Sources)
            {
                resultString += source.DatabaseId;
                resultString += source.Default;
                resultString += source.Id;
                resultString += source.Language;
                resultString += source.Source;
                resultString += source.SourceIdType;
                resultString += source.Type;

                foreach (var query in source.Quieries)
                {
                    resultString += query.Code;
                    resultString += query.VariableType;
                    resultString += query.Selection.Filter;

                    foreach (var value in query.Selection.Values)
                    {
                        resultString += value;
                    }
                }
            }

            foreach (var step in sq.Workflow)
            {
                resultString += step.Type;
                foreach (var(key, value) in step.Params)
                {
                    resultString = resultString + key + value;
                }
            }

            resultString += sq.Output.Type;
            return(resultString);
        }
예제 #20
0
 public void Bind(SavedQuery savedQuery)
 {
     Guard.ArgumentNotNull(savedQuery, "savedQuery");
     _savedQuery              = savedQuery;
     nameTextEdit.Text        = savedQuery.Name;
     descriptionMemoEdit.Text = savedQuery.Description;
     defaultCheck.Checked     = savedQuery.IsDefault;
     if (!string.IsNullOrEmpty(savedQuery.LayoutXml))
     {
         viewGridView.RestoreLayoutFromString(savedQuery.LayoutXml);
     }
     viewGridView.OptionsSelection.EnableAppearanceFocusedCell = false;
     viewGridView.OptionsSelection.EnableAppearanceFocusedRow  = true;
     viewGridView.FocusRectStyle                   = DrawFocusRectStyle.RowFocus;
     viewGridView.OptionsView.ShowIndicator        = false;
     viewGridView.OptionsView.WaitAnimationOptions = WaitAnimationOptions.Panel;
     viewGridView.OptionsView.ShowFilterPanelMode  = ShowFilterPanelMode.Never;
     BindProperityData();
 }
 public ActionResult Edit([Bind(Include = "SavedQueryID,Description,Query")] SavedQuery savedQuery)
 {
     if (ModelState.IsValid)
     {
         db.Entry(savedQuery).State = EntityState.Modified;
         try
         {
             db.SaveChanges();
             TempData["SuccessOHMsg"] = "Saved Query " + savedQuery.Description + " edited";
             return(RedirectToAction("Index"));
         }
         catch
         {
             TempData["DangerOHMsg"] = "Problem editing the Saved Query " + savedQuery.Description;
             return(RedirectToAction("Index"));
         }
     }
     return(RedirectToAction("Index", "Query", null));
 }
예제 #22
0
        private string CreateUrlForScreenRendering(SavedQuery sq, PXModel model)
        {
            if (sq.Sources.Count < 1)
            {
                throw new Exception("No source specified");                       //TODO fix message
            }
            var src = sq.Sources[0];

            if (string.Compare(src.SourceIdType, "path") != 0)
            {
                throw new Exception("Incompatible source type");                                                //TODO fix
            }
            string path      = src.Source;
            var    tableName = QueryHelper.GetTableName(src);

            path = path.Substring(0, path.Length - (tableName.Length + 1));

            if (string.Compare(sq.Sources[0].Type, "CNMM") == 0)
            {
                if (!path.StartsWith("START"))
                {
                    path = "START__" + path;
                }
            }

            path = path.Replace(@"/", PxPathHandler.NODE_DIVIDER);

            List <LinkManager.LinkItem> linkItems = new List <LinkManager.LinkItem>();

            linkItems.Add(new LinkManager.LinkItem(PxUrl.TABLE_KEY, tableName));
            linkItems.Add(new LinkManager.LinkItem(PxUrl.PATH_KEY, path.ToString()));
            linkItems.Add(new LinkManager.LinkItem(PxUrl.DB_KEY, src.DatabaseId));
            linkItems.Add(new LinkManager.LinkItem(PxUrl.LANGUAGE_KEY, src.Language));
            linkItems.Add(new LinkManager.LinkItem(PxUrl.LAYOUT_KEY, "tableViewLayout1"));

            var url = LinkManager.CreateLink("Table.aspx", false, linkItems.ToArray());

            PCAxis.Web.Core.Management.LocalizationManager.ChangeLanguage(src.Language);
            PCAxis.Web.Core.Management.PaxiomManager.PaxiomModel = model;

            return(url);
        }
예제 #23
0
        internal Expression SavedQuery2()
        {
            var  tf = CodeIds == "1";
            var  a  = SavedQuery.Split(":".ToCharArray(), 2);
            Guid QueryId;

            Guid.TryParse(a[0], out QueryId);
            var q2 = db.PeopleQuery(QueryId);

            if (q2 == null)
            {
                return(AlwaysFalse());
            }
            var tag = db.PopulateTemporaryTag(q2.Select(pp => pp.PeopleId));

            Expression <Func <Person, bool> > pred = p => p.Tags.Any(t => t.Id == tag.Id);
            Expression expr = Expression.Invoke(pred, parm);

            return(expr);
        }
예제 #24
0
        public ICollection GenerateFields(Control control)
        {
            var layoutXml             = XElement.Parse(SavedQuery.GetAttributeValue <string>("layoutxml"));
            var cellNames             = layoutXml.Element("row").Elements("cell").Select(cell => cell.Attribute("name")).Where(name => name != null);
            var disabledSortCellNames = layoutXml.Element("row").Elements("cell")
                                        .Where(cell => cell.Attribute("disableSorting") != null && cell.Attribute("disableSorting").Value == "1")
                                        .Where(cell => cell.Attribute("name") != null)
                                        .Select(cell => cell.Attribute("name").Value);
            var fetchXml   = XElement.Parse(SavedQuery.GetAttributeValue <string>("fetchxml"));
            var entityName = fetchXml.Element("entity").Attribute("name").Value;

            var response = (RetrieveEntityResponse)ServiceContext.Execute(new RetrieveEntityRequest
            {
                LogicalName   = entityName,
                EntityFilters = EntityFilters.Attributes
            });

            if (response == null || response.EntityMetadata == null)
            {
                return(new DataControlFieldCollection());
            }

            if (LanguageCode == 0)
            {
                LanguageCode = HttpContext.Current?.GetCrmLcid() ?? CultureInfo.CurrentCulture.LCID;
            }

            var fields =
                from name in cellNames
                let label = GetLabel(ServiceContext, response.EntityMetadata, name.Value, fetchXml, LanguageCode)
                            where label != null
                            select new BoundField
            {
                DataField      = name.Value,
                SortExpression = disabledSortCellNames.Contains(name.Value) ? string.Empty : name.Value,
                HeaderText     = label
            };

            return(fields.ToArray());
        }
예제 #25
0
        [STAThread] // Required to support the interactive login experience
        static void Main(string[] args)
        {
            CrmServiceClient service = null;

            try
            {
                service = SampleHelpers.Connect("Connect");
                if (service.IsReady)
                {
                    // Create any entity records that the demonstration code requires
                    SetUpSample(service);

                    #region Demonstrate

                    //Grab the default public view for opportunities.
                    QueryExpression mySavedQuery = new QueryExpression
                    {
                        ColumnSet  = new ColumnSet("savedqueryid"),
                        EntityName = SavedQuery.EntityLogicalName,
                        Criteria   = new FilterExpression
                        {
                            Conditions =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "isdefault",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { true   }
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "querytype",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = {      0 }
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "returnedtypecode",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { Opportunity.EntityTypeCode }
                                }
                            }
                        }
                    };

                    //This query should return one and only one result.
                    SavedQuery defaultOpportunityQuery = service.RetrieveMultiple(mySavedQuery)
                                                         .Entities.Select(x => (SavedQuery)x).FirstOrDefault();

                    // Retrieve visualizations out of the system.
                    // This sample assumes that you have the "Top Opportunities"
                    // visualization that is installed with Microsoft Dynamics CRM.
                    QueryByAttribute visualizationQuery = new QueryByAttribute
                    {
                        EntityName = SavedQueryVisualization.EntityLogicalName,
                        ColumnSet  = new ColumnSet("savedqueryvisualizationid"),
                        Attributes = { "name" },
                        //If you do not have this visualization, you will need to change
                        //this line.
                        Values = { "Top Opportunities" }
                    };


                    SavedQueryVisualization visualization = service.RetrieveMultiple(visualizationQuery).
                                                            Entities.Select(x => (SavedQueryVisualization)x).FirstOrDefault();
                    //This is the language code for U.S. English. If you are running this code
                    //in a different locale, you will need to modify this value.
                    int languageCode = 1033;

                    //We set up our dashboard and specify the FormXml. Refer to the
                    //FormXml schema in the Microsoft Dynamics CRM SDK for more information.
                    SystemForm dashboard = new SystemForm
                    {
                        Name        = "Sample Dashboard",
                        Description = "Sample organization-owned dashboard.",
                        FormXml     = String.Format(@"<form>
                                <tabs>
                                    <tab name='Test Dashboard' verticallayout='true'>
                                        <labels>
                                            <label description='Sample Dashboard' languagecode='{0}' />
                                        </labels>
                                        <columns>
                                            <column width='100%'>
                                                <sections>
                                                    <section name='Information Section'
                                                        showlabel='false' showbar='false'
                                                        columns='111'>
                                                        <labels>
                                                            <label description='Information Section'
                                                                languagecode='{0}' />
                                                        </labels>
                                                        <rows>
                                                            <row>
                                                                <cell colspan='1' rowspan='10' 
                                                                    showlabel='false'>
                                                                    <labels>
                                                                        <label description='Top Opportunitiess - 1'
                                                                        languagecode='{0}' />
                                                                    </labels>
                                                                    <control id='TopOpportunities'
                                                                        classid='{{E7A81278-8635-4d9e-8D4D-59480B391C5B}}'>
                                                                        <parameters>
                                                                            <ViewId>{1}</ViewId>
                                                                            <IsUserView>false</IsUserView>
                                                                            <RelationshipName />
                                                                            <TargetEntityType>opportunity</TargetEntityType>
                                                                            <AutoExpand>Fixed</AutoExpand>
                                                                            <EnableQuickFind>false</EnableQuickFind>
                                                                            <EnableViewPicker>false</EnableViewPicker>
                                                                            <EnableJumpBar>false</EnableJumpBar>
                                                                            <ChartGridMode>Chart</ChartGridMode>
                                                                            <VisualizationId>{2}</VisualizationId>
                                                                            <EnableChartPicker>false</EnableChartPicker>
                                                                            <RecordsPerPage>10</RecordsPerPage>
                                                                        </parameters>
                                                                    </control>
                                                                </cell>
                                                                <cell colspan='1' rowspan='10' 
                                                                    showlabel='false'>
                                                                    <labels>
                                                                        <label description='Top Opportunities - 2'
                                                                        languagecode='{0}' />
                                                                    </labels>
                                                                    <control id='TopOpportunities2'
                                                                        classid='{{E7A81278-8635-4d9e-8D4D-59480B391C5B}}'>
                                                                        <parameters>
                                                                            <ViewId>{1}</ViewId>
                                                                            <IsUserView>false</IsUserView>
                                                                            <RelationshipName />
                                                                            <TargetEntityType>opportunity</TargetEntityType>
                                                                            <AutoExpand>Fixed</AutoExpand>
                                                                            <EnableQuickFind>false</EnableQuickFind>
                                                                            <EnableViewPicker>false</EnableViewPicker>
                                                                            <EnableJumpBar>false</EnableJumpBar>
                                                                            <ChartGridMode>Grid</ChartGridMode>
                                                                            <VisualizationId>{2}</VisualizationId>
                                                                            <EnableChartPicker>false</EnableChartPicker>
                                                                            <RecordsPerPage>10</RecordsPerPage>
                                                                        </parameters>
                                                                    </control>
                                                                </cell>
                                                            </row>
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                            <row />
                                                        </rows>
                                                    </section>
                                                </sections>
                                            </column>
                                        </columns>
                                    </tab>
                                </tabs>
                            </form>",
                                                    languageCode,
                                                    defaultOpportunityQuery.SavedQueryId.Value.ToString("B"),
                                                    visualization.SavedQueryVisualizationId.Value.ToString("B")),
                        IsDefault = false
                    };
                    _dashboardId = service.Create(dashboard);
                    Console.WriteLine("Created {0}.", dashboard.Name);

                    //Now we will retrieve the dashboard.
                    SystemForm retrievedDashboard = (SystemForm)service.Retrieve(SystemForm.EntityLogicalName, _dashboardId, new ColumnSet(true));
                    Console.WriteLine("Retrieved the dashboard.");

                    // Update the retrieved dashboard. Enable the chart picker on the chart.
                    var xDocument = XDocument.Parse(retrievedDashboard.FormXml);

                    var chartPicker = (from control in xDocument.Descendants("control")
                                       where control.Attribute("id").Value == "TopOpportunities"
                                       select control.Descendants("EnableChartPicker").First()
                                       ).First();
                    chartPicker.Value = "true";

                    //Now we place the updated Xml back into the dashboard, and update it.
                    retrievedDashboard.FormXml = xDocument.ToString();
                    service.Update(retrievedDashboard);

                    // Publish the dashboard changes to the solution.
                    // This is only required for organization-owned dashboards.
                    var updateRequest = new PublishXmlRequest
                    {
                        ParameterXml = @"<dashboard>_dashboardId</dashboard>"
                    };

                    service.Execute(updateRequest);

                    Console.WriteLine("Updated the dashboard.");
                    #endregion Demonstrate

                    #region Clean up
                    CleanUpSample(service);
                    #endregion Clean up
                }
                else
                {
                    const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Microsoft Dataverse";
                    if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR))
                    {
                        Console.WriteLine("Check the connection string values in cds/App.config.");
                        throw new Exception(service.LastCrmError);
                    }
                    else
                    {
                        throw service.LastCrmException;
                    }
                }
            }
            catch (Exception ex)
            {
                SampleHelpers.HandleException(ex);
            }

            finally
            {
                if (service != null)
                {
                    service.Dispose();
                }

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
예제 #26
0
        [STAThread] // Required to support the interactive login experience
        static void Main(string[] args)
        {
            CrmServiceClient service = null;

            try
            {
                service = SampleHelpers.Connect("Connect");
                if (service.IsReady)
                {
                    // Create any entity records that the demonstration code requires
                    SetUpSample(service);
                    #region Demonstrate
                    // Create and Retrieve Offline Filter
                    // In your Outlook client, this will appear in the System Filters tab
                    // under File | CRM | Synchronize | Outlook Filters.
                    Console.Write("Creating offline filter");
                    String contactName = String.Format("offlineFilteredContact {0}",
                                                       DateTime.Now.ToLongTimeString());
                    String fetchXml = String.Format("<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\"><entity name=\"contact\"><attribute name=\"contactid\" /><filter type=\"and\">" +
                                                    "<condition attribute=\"ownerid\" operator=\"eq-userid\" /><condition attribute=\"description\" operator=\"eq\" value=\"{0}\" />" +
                                                    "<condition attribute=\"statecode\" operator=\"eq\" value=\"0\" /></filter></entity></fetch>", contactName);
                    SavedQuery filter = new SavedQuery();
                    filter.FetchXml         = fetchXml;
                    filter.IsQuickFindQuery = false;
                    filter.QueryType        = SavedQueryQueryType.OfflineFilters;
                    filter.ReturnedTypeCode = Contact.EntityLogicalName;
                    filter.Name             = "ReadOnlyFilter_" + contactName;
                    filter.Description      = "Sample offline filter for Contact entity";
                    _offlineFilter          = service.Create(filter);

                    Console.WriteLine(" and retrieving offline filter");
                    var result = (SavedQuery)service.Retrieve(
                        SavedQuery.EntityLogicalName,
                        _offlineFilter,
                        new ColumnSet("name", "description"));
                    Console.WriteLine("Name: {0}", result.Name);
                    Console.WriteLine("Description: {0}", result.Description);
                    Console.WriteLine();

                    // Create and Retrieve Offline Template
                    // In your Outlook client, this will appear in the User Filters tab
                    // under File | CRM | Synchronize | Outlook Filters.
                    Console.Write("Creating offline template");
                    String accountName = String.Format("offlineFilteredAccount {0}",
                                                       DateTime.Now.ToLongTimeString());
                    fetchXml = String.Format("<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\"><entity name=\"account\"><attribute name=\"accountid\" /><filter type=\"and\">" +
                                             "<condition attribute=\"ownerid\" operator=\"eq-userid\" /><condition attribute=\"name\" operator=\"eq\" value=\"{0}\" />" +
                                             "<condition attribute=\"statecode\" operator=\"eq\" value=\"0\" /></filter></entity></fetch>", accountName);
                    var template = new SavedQuery();
                    template.FetchXml         = fetchXml;
                    template.IsQuickFindQuery = false;
                    template.QueryType        = SavedQueryQueryType.OfflineTemplate;
                    template.ReturnedTypeCode = Account.EntityLogicalName;
                    template.Name             = "ReadOnlyFilter_" + accountName;
                    template.Description      = "Sample offline template for Account entity";
                    _offlineTemplate          = service.Create(template);

                    Console.WriteLine(" and retrieving offline template");
                    result = (SavedQuery)service.Retrieve(
                        SavedQuery.EntityLogicalName,
                        _offlineTemplate,
                        new ColumnSet("name", "description"));
                    Console.WriteLine("Name: {0}", result.Name);
                    Console.WriteLine("Description: {0}", result.Description);
                    Console.WriteLine();

                    // Call InstantiateFiltersRequest
                    Console.WriteLine("Retrieving user's ID and creating the template collection");
                    var  whoAmI = new WhoAmIRequest();
                    Guid id     = ((WhoAmIResponse)service.Execute(whoAmI)).UserId;
                    EntityReferenceCollection templates = new EntityReferenceCollection();
                    templates.Add(new EntityReference(
                                      SavedQuery.EntityLogicalName,
                                      _offlineTemplate));

                    Console.WriteLine("Activating the selected offline templates for this user");
                    var request = new InstantiateFiltersRequest
                    {
                        UserId             = id,
                        TemplateCollection = templates
                    };
                    var response = (InstantiateFiltersResponse)service.Execute(request);
                    Console.WriteLine();

                    // Call ResetUserFiltersRequest
                    Console.WriteLine("Resetting the user's offline templates to the defaults");
                    var resetRequest = new ResetUserFiltersRequest
                    {
                        QueryType = SavedQueryQueryType.OfflineFilters
                    };
                    var resetResponse = (ResetUserFiltersResponse)service.Execute(resetRequest);
                    Console.WriteLine();
                    #endregion Demonstrate

                    #region Clean up
                    CleanUpSample(service);
                    #endregion Clean up
                }
                else
                {
                    const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Common Data Service";
                    if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR))
                    {
                        Console.WriteLine("Check the connection string values in cds/App.config.");
                        throw new Exception(service.LastCrmError);
                    }
                    else
                    {
                        throw service.LastCrmException;
                    }
                }
            }
            catch (Exception ex)
            {
                SampleHelpers.HandleException(ex);
            }

            finally
            {
                if (service != null)
                {
                    service.Dispose();
                }

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
예제 #27
0
        /// <summary>
        /// Create a view.
        /// Retrieve Views
        /// Deactivate a view
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptForDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        /// <param name="promptForReactivate">When True, the user will be prompted to reactivate
        /// a view that was deactivated.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete, bool promptForReactivate)
        {
            try
            {

                // Connect to the Organization service. 
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    // Create the view.
                    //<snippetWorkWithViews1>
                    System.String layoutXml =
@"<grid name='resultset' object='3' jump='name' select='1' 
    preview='1' icon='1'>
    <row name='result' id='opportunityid'>
    <cell name='name' width='150' /> 
    <cell name='customerid' width='150' /> 
    <cell name='estimatedclosedate' width='150' /> 
    <cell name='estimatedvalue' width='150' /> 
    <cell name='closeprobability' width='150' /> 
    <cell name='opportunityratingcode' width='150' /> 
    <cell name='opportunitycustomeridcontactcontactid.emailaddress1' 
        width='150' disableSorting='1' /> 
    </row>
</grid>";

                    System.String fetchXml =
                    @"<fetch version='1.0' output-format='xml-platform' 
    mapping='logical' distinct='false'>
    <entity name='opportunity'>
    <order attribute='estimatedvalue' descending='false' /> 
    <filter type='and'>
        <condition attribute='statecode' operator='eq' 
        value='0' /> 
    </filter>
    <attribute name='name' /> 
    <attribute name='estimatedvalue' /> 
    <attribute name='estimatedclosedate' /> 
    <attribute name='customerid' /> 
    <attribute name='opportunityratingcode' /> 
    <attribute name='closeprobability' /> 
    <link-entity alias='opportunitycustomeridcontactcontactid' 
        name='contact' from='contactid' to='customerid' 
        link-type='outer' visible='false'>
        <attribute name='emailaddress1' /> 
    </link-entity>
    <attribute name='opportunityid' /> 
    </entity>
</fetch>";

                    SavedQuery sq = new SavedQuery
                    {
                        Name = "A New Custom Public View",
                        Description = "A Saved Query created in code",
                        ReturnedTypeCode = "opportunity",
                        FetchXml = fetchXml,
                        LayoutXml = layoutXml,
                        QueryType = 0
                    };
                    
                    _customViewId = _serviceProxy.Create(sq);
                    Console.WriteLine("A new view with the name {0} was created.", sq.Name);
                    //</snippetWorkWithViews1>

                    
                    // Retrieve Views
                    //<snippetWorkWithViews2>
                    QueryExpression mySavedQuery = new QueryExpression
                    {
                        ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
                        EntityName = SavedQuery.EntityLogicalName,
                        Criteria = new FilterExpression
                        {
                            Conditions =
            {
                new ConditionExpression
                {
                    AttributeName = "querytype",
                    Operator = ConditionOperator.Equal,
                    Values = {0}
                },
                new ConditionExpression
                {
                    AttributeName = "returnedtypecode",
                    Operator = ConditionOperator.Equal,
                    Values = {Opportunity.EntityTypeCode}
                }
            }
                        }
                    };
                    RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };

                    RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveSavedQueriesRequest);

                    DataCollection<Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;

                    //Display the Retrieved views
                    foreach (Entity ent in savedQueries)
                    {
                        SavedQuery rsq = (SavedQuery)ent;
                        Console.WriteLine("{0} : {1} : {2} : {3} : {4} : {5},", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
                    }
                    //</snippetWorkWithViews2>

                    // Deactivate a view
                    //<snippetWorkWithViews3>
                    System.String SavedQueryName = "Closed Opportunities in Current Fiscal Year";
                    QueryExpression ClosedOpportunitiesViewQuery = new QueryExpression
                    {
                        ColumnSet = new ColumnSet("savedqueryid", "statecode", "statuscode"),
                        EntityName = SavedQuery.EntityLogicalName,
                        Criteria = new FilterExpression
                        {
                            Conditions =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "querytype",
                                    Operator = ConditionOperator.Equal,
                                    Values = {0}
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "returnedtypecode",
                                    Operator = ConditionOperator.Equal,
                                    Values = {Opportunity.EntityTypeCode}
                                },
                                                new ConditionExpression
                                {
                                    AttributeName = "name",
                                    Operator = ConditionOperator.Equal,
                                    Values = {SavedQueryName}
                                }
                            }
                        }
                    };

                    RetrieveMultipleRequest retrieveOpportuntiesViewRequest = new RetrieveMultipleRequest { Query = ClosedOpportunitiesViewQuery };

                    RetrieveMultipleResponse retrieveOpportuntiesViewResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveOpportuntiesViewRequest);

                    SavedQuery OpportunityView = (SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
                    _viewOriginalState = (SavedQueryState)OpportunityView.StateCode;
                    _viewOriginalStatus = OpportunityView.StatusCode;
                    

                    SetStateRequest ssreq = new SetStateRequest
                    {
                        EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, (Guid)OpportunityView.SavedQueryId),
                        State = new OptionSetValue((int)SavedQueryState.Inactive),
                        Status = new OptionSetValue(2)
                    };
                    _serviceProxy.Execute(ssreq);
                    //</snippetWorkWithViews3>
                    _deactivatedViewId = (Guid)OpportunityView.SavedQueryId;


                    DeleteRequiredRecords(promptForDelete);
                    ReactivateDeactivatedView(promptForReactivate);
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
예제 #28
0
        /// <summary>
        /// This method first connects to the Outlook service. Afterwards,
        /// client information is retrieved and the client state is changed.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {

                // Connect to the Organization service. 
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    //<snippetRetrieveDataFilters1>

                    // Create and Retrieve Offline Filter
                    // In your Outlook client, this will appear in the System Filters tab
                    // under File | CRM | Synchronize | Outlook Filters.
                    Console.Write("Creating offline filter");
                    String contactName = String.Format("offlineFilteredContact {0}",
                        DateTime.Now.ToLongTimeString());
                    String fetchXml = String.Format("<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\"><entity name=\"contact\"><attribute name=\"contactid\" /><filter type=\"and\">" +
                        "<condition attribute=\"ownerid\" operator=\"eq-userid\" /><condition attribute=\"description\" operator=\"eq\" value=\"{0}\" />" +
                        "<condition attribute=\"statecode\" operator=\"eq\" value=\"0\" /></filter></entity></fetch>", contactName);
                    SavedQuery filter = new SavedQuery();
                    filter.FetchXml = fetchXml;
                    filter.IsQuickFindQuery = false;
                    filter.QueryType = SavedQueryQueryType.OfflineFilters;
                    filter.ReturnedTypeCode = Contact.EntityLogicalName;
                    filter.Name = "ReadOnlyFilter_" + contactName;
                    filter.Description = "Sample offline filter for Contact entity";
                    _offlineFilter = _serviceProxy.Create(filter);

                    Console.WriteLine(" and retrieving offline filter");
                    SavedQuery result = (SavedQuery)_serviceProxy.Retrieve(
                        SavedQuery.EntityLogicalName,
                        _offlineFilter,
                        new ColumnSet("name", "description"));
                    Console.WriteLine("Name: {0}", result.Name);
                    Console.WriteLine("Description: {0}", result.Description);
                    Console.WriteLine();

                    // Create and Retrieve Offline Template
                    // In your Outlook client, this will appear in the User Filters tab
                    // under File | CRM | Synchronize | Outlook Filters.
                    Console.Write("Creating offline template");
                    String accountName = String.Format("offlineFilteredAccount {0}",
                        DateTime.Now.ToLongTimeString());
                    fetchXml = String.Format("<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\"><entity name=\"account\"><attribute name=\"accountid\" /><filter type=\"and\">" +
                        "<condition attribute=\"ownerid\" operator=\"eq-userid\" /><condition attribute=\"name\" operator=\"eq\" value=\"{0}\" />" +
                        "<condition attribute=\"statecode\" operator=\"eq\" value=\"0\" /></filter></entity></fetch>", accountName);
                    SavedQuery template = new SavedQuery();
                    template.FetchXml = fetchXml;
                    template.IsQuickFindQuery = false;
                    template.QueryType = SavedQueryQueryType.OfflineTemplate;
                    template.ReturnedTypeCode = Account.EntityLogicalName;
                    template.Name = "ReadOnlyFilter_" + accountName;
                    template.Description = "Sample offline template for Account entity";
                    _offlineTemplate = _serviceProxy.Create(template);

                    Console.WriteLine(" and retrieving offline template");
                    result = (SavedQuery)_serviceProxy.Retrieve(
                        SavedQuery.EntityLogicalName,
                        _offlineTemplate,
                        new ColumnSet("name", "description"));
                    Console.WriteLine("Name: {0}", result.Name);
                    Console.WriteLine("Description: {0}", result.Description);
                    Console.WriteLine();
                    //</snippetRetrieveDataFilters1>

                    //<snippetRetrieveDataFilters2>

                    // Call InstantiateFiltersRequest
                    Console.WriteLine("Retrieving user's ID and creating the template collection");
                    WhoAmIRequest whoAmI = new WhoAmIRequest();
                    Guid id = ((WhoAmIResponse)_serviceProxy.Execute(whoAmI)).UserId;
                    EntityReferenceCollection templates = new EntityReferenceCollection();
                    templates.Add(new EntityReference(
                        SavedQuery.EntityLogicalName,
                        _offlineTemplate));

                    Console.WriteLine("Activating the selected offline templates for this user");
                    InstantiateFiltersRequest request = new InstantiateFiltersRequest
                    {
                        UserId = id,
                        TemplateCollection = templates                            
                    };
                    InstantiateFiltersResponse response =
                        (InstantiateFiltersResponse)_serviceProxy.Execute(request);
                    Console.WriteLine();
                    //</snippetRetrieveDataFilters2>

                    //<snippetRetrieveDataFilters3>
                    // Call ResetUserFiltersRequest
                    Console.WriteLine("Resetting the user's offline templates to the defaults");
                    ResetUserFiltersRequest resetRequest = new ResetUserFiltersRequest
                    {
                        QueryType = SavedQueryQueryType.OfflineFilters
                    };
                    ResetUserFiltersResponse resetResponse =
                        (ResetUserFiltersResponse)_serviceProxy.Execute(resetRequest);
                    Console.WriteLine();
                    //</snippetRetrieveDataFilters3>

                    DeleteRequiredRecords(promptforDelete);
                }


            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
예제 #29
0
        /// <summary>
        /// Create a view.
        /// Retrieve Views
        /// Deactivate a view
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptForDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        /// <param name="promptForReactivate">When True, the user will be prompted to reactivate
        /// a view that was deactivated.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete, bool promptForReactivate)
        {
            try
            {
                // Connect to the Organization service.
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    // Create the view.
                    //<snippetWorkWithViews1>
                    System.String layoutXml =
                        @"<grid name='resultset' object='3' jump='name' select='1' 
    preview='1' icon='1'>
    <row name='result' id='opportunityid'>
    <cell name='name' width='150' /> 
    <cell name='customerid' width='150' /> 
    <cell name='estimatedclosedate' width='150' /> 
    <cell name='estimatedvalue' width='150' /> 
    <cell name='closeprobability' width='150' /> 
    <cell name='opportunityratingcode' width='150' /> 
    <cell name='opportunitycustomeridcontactcontactid.emailaddress1' 
        width='150' disableSorting='1' /> 
    </row>
</grid>";

                    System.String fetchXml =
                        @"<fetch version='1.0' output-format='xml-platform' 
    mapping='logical' distinct='false'>
    <entity name='opportunity'>
    <order attribute='estimatedvalue' descending='false' /> 
    <filter type='and'>
        <condition attribute='statecode' operator='eq' 
        value='0' /> 
    </filter>
    <attribute name='name' /> 
    <attribute name='estimatedvalue' /> 
    <attribute name='estimatedclosedate' /> 
    <attribute name='customerid' /> 
    <attribute name='opportunityratingcode' /> 
    <attribute name='closeprobability' /> 
    <link-entity alias='opportunitycustomeridcontactcontactid' 
        name='contact' from='contactid' to='customerid' 
        link-type='outer' visible='false'>
        <attribute name='emailaddress1' /> 
    </link-entity>
    <attribute name='opportunityid' /> 
    </entity>
</fetch>";

                    SavedQuery sq = new SavedQuery
                    {
                        Name             = "A New Custom Public View",
                        Description      = "A Saved Query created in code",
                        ReturnedTypeCode = "opportunity",
                        FetchXml         = fetchXml,
                        LayoutXml        = layoutXml,
                        QueryType        = 0
                    };

                    _customViewId = _serviceProxy.Create(sq);
                    Console.WriteLine("A new view with the name {0} was created.", sq.Name);
                    //</snippetWorkWithViews1>


                    // Retrieve Views
                    //<snippetWorkWithViews2>
                    QueryExpression mySavedQuery = new QueryExpression
                    {
                        ColumnSet  = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
                        EntityName = SavedQuery.EntityLogicalName,
                        Criteria   = new FilterExpression
                        {
                            Conditions =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "querytype",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = {      0 }
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "returnedtypecode",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { Opportunity.EntityTypeCode }
                                }
                            }
                        }
                    };
                    RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest {
                        Query = mySavedQuery
                    };

                    RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveSavedQueriesRequest);

                    DataCollection <Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;

                    //Display the Retrieved views
                    foreach (Entity ent in savedQueries)
                    {
                        SavedQuery rsq = (SavedQuery)ent;
                        Console.WriteLine("{0} : {1} : {2} : {3} : {4} : {5},", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
                    }
                    //</snippetWorkWithViews2>

                    // Deactivate a view
                    //<snippetWorkWithViews3>
                    System.String   SavedQueryName = "Closed Opportunities in Current Fiscal Year";
                    QueryExpression ClosedOpportunitiesViewQuery = new QueryExpression
                    {
                        ColumnSet  = new ColumnSet("savedqueryid", "statecode", "statuscode"),
                        EntityName = SavedQuery.EntityLogicalName,
                        Criteria   = new FilterExpression
                        {
                            Conditions =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "querytype",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = {      0 }
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "returnedtypecode",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { Opportunity.EntityTypeCode }
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "name",
                                    Operator      = ConditionOperator.Equal,
                                    Values        = { SavedQueryName }
                                }
                            }
                        }
                    };

                    RetrieveMultipleRequest retrieveOpportuntiesViewRequest = new RetrieveMultipleRequest {
                        Query = ClosedOpportunitiesViewQuery
                    };

                    RetrieveMultipleResponse retrieveOpportuntiesViewResponse = (RetrieveMultipleResponse)_serviceProxy.Execute(retrieveOpportuntiesViewRequest);

                    SavedQuery OpportunityView = (SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
                    _viewOriginalState  = (SavedQueryState)OpportunityView.StateCode;
                    _viewOriginalStatus = OpportunityView.StatusCode;


                    SetStateRequest ssreq = new SetStateRequest
                    {
                        EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, (Guid)OpportunityView.SavedQueryId),
                        State         = new OptionSetValue((int)SavedQueryState.Inactive),
                        Status        = new OptionSetValue(2)
                    };
                    _serviceProxy.Execute(ssreq);
                    //</snippetWorkWithViews3>
                    _deactivatedViewId = (Guid)OpportunityView.SavedQueryId;


                    DeleteRequiredRecords(promptForDelete);
                    ReactivateDeactivatedView(promptForReactivate);
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> )
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
예제 #30
0
        private void GetCurrentSavedQueryXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SavedQuery savedQuery)
        {
            string fieldName  = SavedQueryRepository.GetFieldNameByXmlRoot(doc.Root.Name.ToString());
            string fieldTitle = SavedQueryRepository.GetFieldTitleByXmlRoot(doc.Root.Name.ToString());

            string xmlContent = savedQuery.GetAttributeValue <string>(fieldName);

            if (string.IsNullOrEmpty(xmlContent))
            {
                this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, SavedQuery.Schema.EntityLogicalName, savedQuery.Name, fieldTitle);
                this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData);
                return;
            }

            commonConfig.CheckFolderForExportExists(this._iWriteToOutput);

            string currentFileName = EntityFileNameFormatter.GetSavedQueryFileName(service.ConnectionData.Name, savedQuery.ReturnedTypeCode, savedQuery.Name, fieldTitle, FileExtension.xml);
            string currentFilePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(currentFileName));

            try
            {
                File.WriteAllText(currentFilePath, xmlContent, new UTF8Encoding(false));

                this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, SavedQuery.Schema.EntityLogicalName, savedQuery.Name, fieldTitle, currentFilePath);

                this._iWriteToOutput.PerformAction(service.ConnectionData, currentFilePath);
            }
            catch (Exception ex)
            {
                this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex);

                service.TryDispose();
            }
        }
예제 #31
0
 private Task GetCurrentSavedQueryXmlAsync(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SavedQuery savedQuery)
 {
     return(Task.Run(() => GetCurrentSavedQueryXml(service, commonConfig, doc, filePath, savedQuery)));
 }
예제 #32
0
 private Task OpenInWebSavedQueryXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SavedQuery savedQuery)
 {
     return(Task.Run(() =>
     {
         service.UrlGenerator.OpenSolutionComponentInWeb(ComponentType.SavedQuery, savedQuery.Id);
         service.TryDispose();
     }));
 }
        private XrmSavedQueryDefinition MapSavedQueryToDefinition(SavedQuery query)
        {
            var returnedTypeCode = query.ReturnedTypeCode;

            var entity = EntityDefinitionGet(returnedTypeCode);

            var definition = new XrmSavedQueryDefinition
            {
                Name = query.Name,
                FetchXml = query.FetchXml,
                SavedQueryId = query.SavedQueryId.Value,
                LayoutXml = query.LayoutXml,
                Entity = entity.TableName,
                EntityDisplayName = entity.DisplayName
            };

            return definition;
        }
예제 #34
0
        private void WriteAttributes(XmlWriter w, bool newGuids = false)
        {
            if (newGuids)
            {
                w.WriteAttributeString("Id", Guid.NewGuid().ToString());
            }
            else
            {
                w.WriteAttributeString("Id", Id.ToString());
            }

            w.WriteAttributeString("Order", Order.ToString());
            w.WriteAttributeString("Field", ConditionName);
            w.WriteAttributeString("Comparison", Comparison);
            if (Description.HasValue())
            {
                w.WriteAttributeString("Description", Description);
            }
            if (PreviousName.HasValue())
            {
                w.WriteAttributeString("PreviousName", Description);
            }
            if (TextValue.HasValue())
            {
                w.WriteAttributeString("TextValue", TextValue);
            }
            if (DateValue.HasValue)
            {
                w.WriteAttributeString("DateValue", DateValue.ToString());
            }
            if (CodeIdValue.HasValue())
            {
                w.WriteAttributeString("CodeIdValue", CodeIdValue);
            }
            if (StartDate.HasValue)
            {
                w.WriteAttributeString("StartDate", StartDate.ToString());
            }
            if (EndDate.HasValue)
            {
                w.WriteAttributeString("EndDate", EndDate.ToString());
            }
            if (Program > 0)
            {
                w.WriteAttributeString("Program", Program.ToString());
            }
            if (Division > 0)
            {
                w.WriteAttributeString("Division", Division.ToString());
            }
            if (Organization > 0)
            {
                w.WriteAttributeString("Organization", Organization.ToString());
            }
            if (OrgType > 0)
            {
                w.WriteAttributeString("OrgType", OrgType.ToString());
            }
            if (Days > 0)
            {
                w.WriteAttributeString("Days", Days.ToString());
            }
            if (Quarters.HasValue())
            {
                w.WriteAttributeString("Quarters", Quarters);
            }
            if (Tags.HasValue())
            {
                w.WriteAttributeString("Tags", Tags);
            }
            if (Schedule != 0)
            {
                w.WriteAttributeString("Schedule", Schedule.ToString());
            }
            if (Campus > 0)
            {
                w.WriteAttributeString("Campus", Campus.ToString());
            }
            if (ConditionName != "FamilyHasChildrenAged")
            {
                Age = null;
            }
            if (Age.HasValue)
            {
                w.WriteAttributeString("Age", Age.ToString());
            }
            if (SavedQuery.HasValue())
            {
                w.WriteAttributeString("SavedQueryIdDesc", SavedQuery);
            }
            if (OnlineReg.HasValue)
            {
                w.WriteAttributeString("OnlineReg", OnlineReg.ToString());
            }
            if (OrgStatus.HasValue)
            {
                w.WriteAttributeString("OrgStatus", OrgStatus.ToString());
            }
            if (OrgType2.HasValue)
            {
                w.WriteAttributeString("OrgType2", OrgType2.ToString());
            }
            if (OrgName.HasValue())
            {
                w.WriteAttributeString("OrgName", OrgName);
            }
        }
예제 #35
0
        /// <summary>
        /// Creates any entity records that this sample requires.
        /// </summary>
        public void CreateRequiredRecords()
        {
            #region Create Accounts to query over

            Console.WriteLine("  Creating some sample accounts");

            Account account = new Account()
            {
                Name = "Coho Vineyard"
            };
            account.Id = _serviceProxy.Create(account);
            _accounts.Add(account);
            Console.WriteLine("    Created Account {0}", account.Name);

            account = new Account()
            {
                Name = "Coho Winery"
            };
            account.Id = _serviceProxy.Create(account);
            _accounts.Add(account);
            Console.WriteLine("    Created Account {0}", account.Name);

            account = new Account()
            {
                Name = "Coho Vineyard & Winery"
            };
            account.Id = _serviceProxy.Create(account);
            _accounts.Add(account);
            Console.WriteLine("    Created Account {0}", account.Name);

            #endregion

            #region Create a Saved Query

            Console.WriteLine("  Creating a Saved Query that retrieves all Account ids");

            _savedQuery = new SavedQuery()
            {
                Name = "Fetch all Account ids",
                ReturnedTypeCode = Account.EntityLogicalName,
                FetchXml = @"
                    <fetch mapping='logical'>
                        <entity name='account'>
                            <attribute name='name' />
                        </entity>
                    </fetch>",
                QueryType = 0,
                
            };
            _savedQuery.Id = _serviceProxy.Create(_savedQuery);

            #endregion

            #region Create a User Query

            Console.WriteLine(
                "  Creating a User Query that retrieves all Account ids for Accounts with name 'Coho Winery'");

            _userQuery = new UserQuery()
            {
                Name = "Fetch Coho Winery",
                ReturnedTypeCode = Account.EntityLogicalName,
                FetchXml = @"
                    <fetch mapping='logical'>
	                    <entity name='account'>
		                    <attribute name='name' />
		                    <filter>
			                    <condition attribute='name' operator='eq' value='Coho Winery' />
		                    </filter>
	                    </entity>
                    </fetch>",
                QueryType = 0
            };
            _userQuery.Id = _serviceProxy.Create(_userQuery);

            #endregion
        }