23 Kasım 2012 Cuma

Crm 2011'de Sub Grid'i JavaScript ile Yenilemek

var grid = Xrm.Page.ui.controls.get("subgrid_ismi");
grid.refresh();

// yada bu şekilde kullanabilirsiniz
document.getElementById("subgrid_ismi").control.refresh();

Crm 2011'de Javascript ile Bir Alanın Zorunluluğu Değiştirmek


Crm 2011'de bir alanın zorunlu olup olmadığını javascript ile belirlemek için aşağıdaki kodu kullanabiliriz.
// Zorunlu değil
Xrm.Page.getAttribute("alan_adi").setRequiredLevel("none");
  
// Mecburi
Xrm.Page.getAttribute("alan_adi").setRequiredLevel("required");
  
// Önerilen
Xrm.Page.getAttribute("alan_adi").setRequiredLevel("recommended");

22 Kasım 2012 Perşembe

CRM 2011-Teklifi Win Yapma(Quote Win)


WinQuoteRequest classını kullanarak QuoteId property sıne Teklifin reference ını vermek yeterlidir.

WinQuoteRequest winQuoteRequest = new WinQuoteRequest()
                    {
                        QuoteClose = new QuoteClose()
                        {
                            Subject = "Teklif Kapatıldı." + DateTime.Now.ToString(),
                            QuoteId = quote.ToEntityReference() // new EntityReference("quote",quote.Id)
                        },
                        Status = new OptionSetValue(-1)
                    };
                    _serviceProxy.Execute(winQuoteRequest);

CRM 2011-SalesOrder Unlock İşlemi


Eğer order ımız lock ise ,yani ispricelocked ==true, salesorder ı unlock işlemine tabi tutmadan update yapamayız.Eğer bu işlemi yapmazsak "salesorder lock" diye hata alırız.

SalesOrder order=(SalesOrder)_serviceProxy.Retrieve("salesorder",_guidid,new ColumnSet("salesorderid","ispricelocked"));

if(order.IsPriceLocked ==true){
  UnlockSalesOrderPricingRequest unlockOrderRequest =
                                 new UnlockSalesOrderPricingRequest()
                    {
                        SalesOrderId = _salesOrderId // Order ımızın guid id sini veriyoruz.
                    };
                    _serviceProxy.Execute(unlockOrderRequest);
}
Artık salesorder ımızın ispricelocked u false tur.İlgili değişiklikler yapıp update yapabiliriz.

CRM 2011-Query Expression -(Sort İşlemi )


QueryExpression sorgu=new QueryExpression (){
EntityName="product",
ColumnSet=new ColumnSet(){AllColumns=true}
};

OrderExpression order=new  OrderExpresison(){
 AttributeName="name",  // hangı alana gore sıralama yapacagınızı belırlıyorsunuz.
OrderType=OrderType.Ascending // artan sırada sıralama yapar.Mesela bu örnek te isme gore a dan z ye dogru sıralama yapar.
};

sorgu.Orders.Add(order); // sorgumuza sortumuzu eklemeyı unutmayalım.
Yukarıdakı kod da, tum ürünleri isim alanına gore A dan Z ye dogru sıralar.

Not: Birden cok alana gore sıralama yapmak istersek OrderExpression olusturup QueryExpression ımıza eklememiz gerekir.QueryExpression ımıza ekledıgımız sırada sıralama yapar.

Örnek 2:Birden cok alana gore sıralama 

public static BusinessEntityCollection GetDynamicEntitiesWithFiltersOrdered(string entityName, string[] attributes, string[] fields, string[] values, string[] orderfields, bool[] orderAscending, ICrmService serv)
{
    
        var filters = new FilterExpression { FilterOperator = LogicalOperator.And };

        for (int i = 0; i < fields.Length; i++)
        {
            var condition = new ConditionExpression
            {
                AttributeName = fields[i],
                Operator = ConditionOperator.Equal,
                Values = new[] { values[i] }
            };

            filters.Conditions.Add(condition);
        }
        
        var query = new QueryExpression
        {
            EntityName = entityName,
            ColumnSet = new ColumnSet(attributes),
            Criteria = filters
        };

        for (int i = 0; i < fields.Length; i++)
        {
            var oneExpression = new OrderExpression
                 {
                     AttributeName = orderfields[i],
                     OrderType = (orderAscending[i] ? OrderType.Ascending : OrderType.Descending)
                 };

            query.Orders.Add(oneExpression);
        }

        var retrieve = new RetrieveMultipleRequest { Query = query, ReturnDynamicEntities = true };

        var retrieved = (RetrieveMultipleResponse)serv.Execute(retrieve);

        return retrieved.BusinessEntityCollection;
    }
}

21 Kasım 2012 Çarşamba

CRM 2011-Yönetici Atama( SetParentSystemUserRequest)


private string YoneticiAta(int oracleyoneticiId,Guid userid, IOrganizationService service) {
            string ileti = string.Empty;
            try {
                SystemUser yonetici = Kullanici.SatisTemsilciBul(oracleyoneticiId, service);
                if (yonetici != null && yonetici.Id != Guid.Empty) {
                    try {
                        SetParentSystemUserRequest req = new SetParentSystemUserRequest();
                        req.UserId = userid;
                        req.ParentId = yonetici.Id;
                        req.KeepChildUsers = true;
                        SetParentSystemUserResponse resp = (SetParentSystemUserResponse)crmService.Execute(req);
                    }
                    catch (Exception ex) {
                        ileti= "Yonetici atamada hata olustu.Hata :" + ex.Message;
                    }
                }
            }
            catch (Exception ex) {
                ileti = ex.Message;
            }
            return ileti;
        }

CRM 2011-OptionSetValue Değerlerini Alma


 private string getName(string optionsetName,int val,string entity)
        {
            try
            {
                RetrieveAttributeRequest req = new RetrieveAttributeRequest();
                req.EntityLogicalName = entity;
                req.LogicalName = optionsetName;               
                RetrieveAttributeResponse res = (RetrieveAttributeResponse)XrmContext.Execute(req);
                PicklistAttributeMetadata objPckLstAttMetadata = new PicklistAttributeMetadata();
                ICollection<object> objCollection = res.Results.Values;
                objPckLstAttMetadata.OptionSet = ((EnumAttributeMetadata)(objCollection.ElementAt(0))).OptionSet;
                foreach (var item in objPckLstAttMetadata.OptionSet.Options)
                {
                    if (item.Value==val)
                    {
                        return item.Label.LocalizedLabels[0].Label;
                    }
                }
                return string.Empty;
            }
            catch (Exception)
            {

                return string.Empty;
            }
        }