Şimdi
sizlere formun ribbonundan bir butona tıklanarak invoice un nasıl canceled
edilecegini anlatacağım.
İlk olarak
formun ribbonuna bir buton ekleyelim ve javascript yazarak bu butona tıklanınca
bir aspx sayfasına yönlendirilmesini sağlayalım.(ribbona buton ekleme ve bunun
calıstırılacagı javascript dosyasının nasıl verildiğini bir başka yazımda
anlatmıştım. )
namespace
TestCRM.InvoiceInterface
{
public partial class InvoiceCanceled :
System.Web.UI.Page
{
IOrganizationService crmService;
//İlk olarak
bir web sayfasından aspx sayfasına veri göndermeyi ve veri alıs verişini
saglamak için Render metodunu kullandık.Gonderdıgımız veriyi queryString ile
okuyoruz.
Verinin javascriptle nasıl yollandıgı sayfanın en alt kısmında bulabilirsiniz.
protected override void
Render(HtmlTextWriter writer)
{
Response.Clear();
Response.ContentType =
"text/xml";
string entityID =
Request.QueryString["entityid"];
Session["entityid"] =
entityID;// entity id yi postback olsa da kullanabiliyoruz.Sayfa kapanana kadar session da saklayıp ,istediğimiz zaman kullanabiliriz.
if
(!string.IsNullOrEmpty(entityID))
{
CanceledInvoice();
}
else
{
Response.Redirect("../ErrorPage.aspx");
//entity id javascript ile gönderilemezse hata sayfasına yonlendırıyoruz.
}
}
protected void Page_Load(object sender,
EventArgs e)
{
if (!IsPostBack)
{
}
}
private void CanceledInvoice()
{
string invoiceId =
(string)Session["entityid"];
Guid _invoiceId = Guid.Empty;
if
(!string.IsNullOrEmpty(invoiceId))
_invoiceId =
Guid.Parse(invoiceId);
if (_invoiceId != Guid.Empty)
{
//Crm e
baglanıyoruz.
crmService =
DynamicCrmConnection.GetCrmService();
if (crmService != null)
{
Invoice invoice =
(Invoice)crmService.Retrieve("invoice", invoice.Id, new ColumnSet() {
AllColumns=true});
if (invoice != null
&& invoice.Id != Guid.Empty)
{
if (invoice.StateCode
==InvoiceState.Active)
{//invoice active se
cancel edilebilir.
try
{
//SetStateRequest
ile invoice un id si ve logical name ini vererek cancel edebiliyoruz.
//Statecode=3
invoice formunun canceled oldugunu gosterir.
//Status =100003 de canceled formunun bir durumudur.
SetStateRequest
setStateRequest = new SetStateRequest()
{
EntityMoniker = new EntityReference
{
Id =
invoice.Id,
LogicalName = "invoice"
},
State = new
OptionSetValue(3),// inactive
Status =
new OptionSetValue(100003)// qualified
};
crmService.Execute(setStateRequest);
}
catch (Exception)
{
//Hata
alınmazsa invoice canceled olmus demektir.
}
}
}
}
}
}
}
}
Javascript
function CanceledInvoice() {
var entityid = Xrm.Page.data.entity.getId();
/*invoice formunun id si alınır ve XML.Dom kullanılarak aspx sayfasına veri gönderilir ve geriye veri okunur.*/
var xmldoc_sendApp = new ActiveXObject("Microsoft.XMLDOM");
xmldoc_sendApp.async = false;
xmldoc_sendApp.load("http://denemehost:8989/InvoiceInterface/InvoiceCanceled.aspx?entityid=" + entityid);
/*yukarıdakı url sayfanızı host ettiğiniz sayfanın adresidir.Ben IIS teki yolunu verdim.8989 ise sayfanın bulundugu hostdakı port numarasıdır.*/
var logMessage = xmldoc_sendApp.selectSingleNode("logmessage");
/*logmessage tagları arasında geriye veri gönderilir.*/
if (logMessage != null) {
if (logMessage.text != "") {
alert(logMessage.text);
window.location.reload();//Sayfa refresh olur.
}
}
}
Sorularınızı gkhnmnts@gmail adresine atabilirsiniz.
Hiç yorum yok:
Yorum Gönder