My client requirement is display the unique reg number for new contact before the save record.
My Previous blog <a href="http://makdns.blogspot.com/2016/03/ms-dynamics-crm-generate-uniqueauto.html">MS Dynamics CRM - Generate Unique/Auto Number</a> will show the reg number on form after save the new contact. if the user clicks save and close, they can't see the number.
So i come up with the web service concept to generate unique number for new contact and display on the contact screen.
Also i am using SQL Server sys.sequences for generating new number.
Web Service Code
My Previous blog <a href="http://makdns.blogspot.com/2016/03/ms-dynamics-crm-generate-uniqueauto.html">MS Dynamics CRM - Generate Unique/Auto Number</a> will show the reg number on form after save the new contact. if the user clicks save and close, they can't see the number.
So i come up with the web service concept to generate unique number for new contact and display on the contact screen.
Also i am using SQL Server sys.sequences for generating new number.
Web Service Code
[ServiceContract]
public interface IVoterSearch
{
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string RegNumber(string userGuid);
}
/*
* Generate new reg number
--https://msdn.microsoft.com/en-us/library/ff878091.aspx
--drop SEQUENCE dbo.DNSContactRegNumber
--select * from sys.sequences
--CREATE SEQUENCE dbo.DNSContactRegNumber
-- AS int
-- START WITH 123456
-- INCREMENT BY 1;
--SELECT NEXT VALUE FOR dbo.DNSContactRegNumber As NewRegNumber;
*/
public string RegNumber(string userGuid)
{
//checking the user is login dynamics crm user for security purpose.
var valid = IsUserValid(userGuid, crmDB);
if (!(valid == string.Empty)) return valid;
var regid = new XDocument();
string NewRegNumber = "0";
string dbExtCon = System.Configuration.ConfigurationManager.ConnectionStrings["DNS_EXT_DB_ConnectionString"].ConnectionString;
try
{
using (SqlConnection Con = new SqlConnection(dbCon))
{
Con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT NEXT VALUE FOR dbo.DNSContactRegNumber As NewRegNumber";
cmd.Connection = Con;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
NewRegNumber = dr["NewRegNumber"].ToString();
}
dr.Close();
}
regid = new XDocument(
new XElement("Contact",
new XAttribute("Error", "0"),
new XAttribute("Message", ""),
new XAttribute("NewRegNumber", NewRegNumber)
)
);
}
catch (Exception e)
{
regid = new XDocument(
new XElement("Contact",
new XAttribute("Error", "1"),
new XAttribute("Message", e.Message.ToString()),
new XAttribute("NewRegNumber", NewRegNumber)
)
);
}
return regid.ToString();
}
//verify the login user is valid active system user.
private string IsUserValid(string userGuid, DNSCRMDBDataContext db)
{
var exists = false;
loginUserGuid = loginUserGuid.Replace("}", "").Replace("{", "");
var valid = db.SystemUsers
.Where(u => u.SystemUserId.ToString() == userGuid)
.Select(u => u.IsDisabled)
.FirstOrDefault().ToString();
if (valid == string.Empty) exists = false;
else exists = !bool.Parse(valid);
if (!exists)
{
var message = new XDocument( new XElement("List",
new XAttribute("Error", "1"),
new XAttribute("Message", "Invalid CRM USER")
));
return message.ToString();
}
return string.Empty;
}
Contact Form Onload JavaScript Code, calling the web service on form load event and assign new reg number.public interface IVoterSearch
{
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string RegNumber(string userGuid);
}
/*
* Generate new reg number
--https://msdn.microsoft.com/en-us/library/ff878091.aspx
--drop SEQUENCE dbo.DNSContactRegNumber
--select * from sys.sequences
--CREATE SEQUENCE dbo.DNSContactRegNumber
-- AS int
-- START WITH 123456
-- INCREMENT BY 1;
--SELECT NEXT VALUE FOR dbo.DNSContactRegNumber As NewRegNumber;
*/
public string RegNumber(string userGuid)
{
//checking the user is login dynamics crm user for security purpose.
var valid = IsUserValid(userGuid, crmDB);
if (!(valid == string.Empty)) return valid;
var regid = new XDocument();
string NewRegNumber = "0";
string dbExtCon = System.Configuration.ConfigurationManager.ConnectionStrings["DNS_EXT_DB_ConnectionString"].ConnectionString;
try
{
using (SqlConnection Con = new SqlConnection(dbCon))
{
Con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT NEXT VALUE FOR dbo.DNSContactRegNumber As NewRegNumber";
cmd.Connection = Con;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
NewRegNumber = dr["NewRegNumber"].ToString();
}
dr.Close();
}
regid = new XDocument(
new XElement("Contact",
new XAttribute("Error", "0"),
new XAttribute("Message", ""),
new XAttribute("NewRegNumber", NewRegNumber)
)
);
}
catch (Exception e)
{
regid = new XDocument(
new XElement("Contact",
new XAttribute("Error", "1"),
new XAttribute("Message", e.Message.ToString()),
new XAttribute("NewRegNumber", NewRegNumber)
)
);
}
return regid.ToString();
}
//verify the login user is valid active system user.
private string IsUserValid(string userGuid, DNSCRMDBDataContext db)
{
var exists = false;
loginUserGuid = loginUserGuid.Replace("}", "").Replace("{", "");
var valid = db.SystemUsers
.Where(u => u.SystemUserId.ToString() == userGuid)
.Select(u => u.IsDisabled)
.FirstOrDefault().ToString();
if (valid == string.Empty) exists = false;
else exists = !bool.Parse(valid);
if (!exists)
{
var message = new XDocument( new XElement("List",
new XAttribute("Error", "1"),
new XAttribute("Message", "Invalid CRM USER")
));
return message.ToString();
}
return string.Empty;
}
/*
assign reg number when form is opened
Create New Reg Number & assign to the field.
*/
function NewRegNumber() {
var userId = Xrm.Page.context.getUserId();
var svcURL = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + "/DNS.VM.Service/";
$.ajax({
type: "POST",
url: svcURL + "Contact.svc/RegNumber",
async: true,
dataType: "xml",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ userGuid: userId}),
success: function (xml) {
xml = $.parseXML($(xml).find("string").text());
$(xml).find("Contact").each(function () {
var error = $(this).attr('Error');
var regnumber = $(this).attr('NewRegNumber');
var message = $(this).attr('Message');
if (error == "1")
alert(message);
else
Xrm.Page.data.entity.attributes.get("dns_regnumber").setValue(regnumber);
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
}
assign reg number when form is opened
Create New Reg Number & assign to the field.
*/
function NewRegNumber() {
var userId = Xrm.Page.context.getUserId();
var svcURL = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '') + "/DNS.VM.Service/";
$.ajax({
type: "POST",
url: svcURL + "Contact.svc/RegNumber",
async: true,
dataType: "xml",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ userGuid: userId}),
success: function (xml) {
xml = $.parseXML($(xml).find("string").text());
$(xml).find("Contact").each(function () {
var error = $(this).attr('Error');
var regnumber = $(this).attr('NewRegNumber');
var message = $(this).attr('Message');
if (error == "1")
alert(message);
else
Xrm.Page.data.entity.attributes.get("dns_regnumber").setValue(regnumber);
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
}
No comments:
Post a Comment