Elasticsearch skip null values - c#

there are empty fields in the document I created.
var settings = new ConnectionSettings(new Uri(uri)).DefaultIndex("person");
var client = new ElasticClient(settings);
for example;
var newPerson = new Person()
{
newPerson.Name = "Jack",
newPerson.Age = 30,
newPerson.Image = "";
}
var savePerson = client.Create(newPerson , i => i.Index("person"));
I don't want to save the "Image" field when saving.
Can I ignore this field or skip it while saving?

Set the property:
newPerson.Image = null;
and it won't be saved to elastisearch

Related

How Can Fields With Validation be Prefilled in DocuSign?

I have a field in my template that has validation for numbers only enabled. If I were to remove this validation, it would prefill the field on the document. Enabling it will not prefill that field. Is there a way to prefill validated fields?
I am using the latest version of DocuSign nuget package.
This is my code to prefill the data. It only works on non-validated fields.
var accountNumber = new Text
{
TabLabel = "AccountNumber",
Value = form.AccNo,
};
var tabList = new List<Text> {bankName, accountNumber, accountName};
formInfo.Tabs = new Tabs();
formInfo.Tabs.TextTabs = tabList;
envelope.TemplateRoles = new List<TemplateRole> { formInfo };
envelope.Status = "sent";
var summary = envelopesApi.CreateEnvelope(AccountID, envelope);
When you enable Validation for a field, it actually changes the field type. Instead of a Text, that tag will now be a Number:
var accountNumber = new DocuSign.eSign.Model.Number
{
TabLabel = "AccountNumber",
Value = form.AccNo
};
and it will need to go into a different Tabs list under your Recipient:
signer.Tabs = new Tabs
{
TextTabs = new List<DocuSign.eSign.Model.Text>
{
bankName,
accountName
},
NumberTabs = new List<DocuSign.eSign.Model.Number>
{
accountNumber
}
};
Other validation options can also change the tab type. Depending on what you're doing, you could be working with EmailTabs, DateTabs, SsnTabs or ZipTabs.

How do I update address composite in MS CRM?

Problem
I am trying to get my accounts to update the composite address with the new address. Al the fields in the customer address show the new values but the composite address shows the old address.
Desired Result:
Composite field updates to the new address upon changing the address fields
Actual Result:
Composite field shows the old address
Things I've Tried:
Updating the address
Deleting The Address and creating a new one (BAD IDEA)
Setting all fields to the default values when the account was created
Setting the composite field directly
Setting the version number to the default 0x00003F3F
Setting all address fields to null
Current Code:
Entity theAccount = proxy.Retrieve("account", Guid.Parse("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"), new Microsoft.Xrm.Sdk.Query.ColumnSet(true));
Guid address1_id = theAccount.Attributes.ContainsKey("address1_addressid") ? (Guid)theAccount.Attributes["address1_addressid"] : Guid.Empty;
Entity theAddress = new Entity()
{
LogicalName = "customeraddress",
Id = address1_id
};
theAddress.Attributes["line1"] = null;
theAddress.Attributes["line2"] = null;
theAddress.Attributes["line3"] = null;
theAddress.Attributes["city"] = null;
theAddress.Attributes["stateorprovince"] = null;
theAddress.Attributes["country"] = null;
theAddress.Attributes["county"] = null;
theAddress.Attributes["postofficebox"] = null;
theAddress.Attributes["postalcode"] = null;
theAddress.Attributes["composite"] = null;
proxy.Update(theAddress);
theAddress.Attributes["line1"] = "1 New Street";
theAddress.Attributes["line2"] = null;
theAddress.Attributes["line3"] = null;
theAddress.Attributes["city"] = "New City";
theAddress.Attributes["stateorprovince"] = "New State";
theAddress.Attributes["country"] = "New Country";
theAddress.Attributes["county"] = null;
theAddress.Attributes["postofficebox"] = null;
theAddress.Attributes["postalcode"] = "1234";
proxy.Update(theAddress);
Question
How do I successfully change the address composite field in Microsoft Dynamic CRM upon updating the address fields
You should update the address fields of the Account record, not the CustomerAddress.
i.e.
Entity theAccount = new Entity("account", "XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX");
theAccount["address1_line1"] = null;
theAccount["address1_line2"] = null;
theAccount["address1_line3"] = null;
theAccount["address1_city"] = null;
theAccount["address1_stateorprovince"] = null;
theAccount["address1_country"] = null;
theAccount["address1_county"] = null;
theAccount["address1_postofficebox"] = null;
theAccount["address1_postalcode"] = null;
theAccount["address1_composite"] = null;
proxy.Update(theAccount);
theAccount["address1_line1"] = "1 New Street";
theAccount["address1_line2"] = null;
theAccount["address1_line3"] = null;
theAccount["address1_city"] = "New City";
theAccount["address1_stateorprovince"] = "New State";
theAccount["address1_country"] = "New Country";
theAccount["address1_county"] = null;
theAccount["address1_postofficebox"] = null;
theAccount["address1_postalcode"] = "1234";
proxy.Update(theAccount);
If this you're doing is a real-time operation of some kind taking place while the form is open, you also might need to invoke Xrm.Page.data.refresh(false) for the new data to show up.

OpenText content Web Services metadata

I have following code:
have 7 different attributes for ReportDetails.
But this code doesn't seem to work, and there is no error.
AttributeGroup DocTypeGrp = new AttributeGroup();
DocTypeGrp = docManClient.GetCategoryTemplate(ref otAuthentication, 12456);
StringValue doc = new StringValue();
doc.Values = new string[1];
doc.Values[0] = "Report";
DocTypeGrp.Values[0] = doc;
AttributeGroup rptDetailsGrp = docManClient.GetCategoryTemplate(ref otAuthentication, 45632);
StringValue rptGroup = new StringValue();
rptGroup.Values = new string[1];
rptGroup.Values[0] = string.Empty;
// rptGroup.Values[1] = "2012";
rptDetailsGrp.Values[0] = rptGroup;
rptGroup = new StringValue();
rptGroup.Values = new string[1];
rptGroup.Values[0] = "2012";
rptDetailsGrp.Values[1] = rptGroup;
Node existingNode = docManClient.GetNode(ref otAuthentication, reportFolder.ID); // Set Node
Metadata metadata = new Metadata(); //Create Metadata object
metadata.AttributeGroups = new AttributeGroup[] { DocTypeGrp , rptDetailsGrp };
existingNode.Metadata = metadata; // Set the Metadata objects back onto the node
docManClient.UpdateNode(ref otAuthentication, reportFolder);//Update Node
Would really apprecitate any help.
Since you are adding the category to existingNode object and while updating the node you are passing reportFolder which doesn't have the category.
Changing the code as below should resolve your issue
docManClient.UpdateNode(ref otAuthentication, existingNode);//Update Node

How to create complex filter in c# for Magento API

I am trying to create a complex filter in c# to get data from magento API. I already written the following code
MagentoService mservice = new MagentoService();
var mlogin = mservice.login("***", "****");
var result = mservice.storeList(mlogin);
var cpf = new complexFilter[2];
cpf[0] = new complexFilter
{
key = "created_in",
value = new associativeEntity
{
key = "in",
value = "website A"
}
};
cpf[1] = new complexFilter
{
key = "bv_customer_number",
value = new associativeEntity
{
key = "in",
value = "Not Approved"
}
};
var filters = new filters();
filters.complex_filter = cpf;
var result3 = mservice.customerCustomerList(mlogin, filters);
This code works perfect the only issue is I want to add the multiple values in my key = "created_in" with value = "website a", "website b"
Anyone got any ideas on how to properly pass multiple values for a single key?
I solved this problem by aggregating values into 1 value with ',' as separator:
new complexFilter
{
key = "created_in",
value = new associativeEntity
{
key = "in",
value = "websiteA,websiteB,websiteC"
}
};

NetSuite. How to select all attached files for current user (filter by InternalId)

I am using C# implementation of netsuite api from web reference com.netsuite.webservices
I released filter fileSearch.basic by name (you can see it commented) it is working fine.
Please help to write function to achieve all attached files for current user. Something is wrong in this code, it filters nothing and showing me all files as it is without any filter. Please help me.
public static void GetFileAttachmentByCustomerId(string customerId)
{
using (NetSuiteService netSuiteService = GetNetSuiteService())
{
FileSearch fileSearch = new FileSearch();
// this works fine (filter files by name)
//SearchStringField nameSearchParams = new SearchStringField
//{
// #operator = SearchStringFieldOperator.contains,
// operatorSpecified = true,
// searchValue = "some name",
//};
//fileSearch.basic = new FileSearchBasic() { name = nameSearchParams };
// this code not filter files at all
{
RecordRef nsCustomerRef = new RecordRef
{
internalId = customerId,
type = RecordType.customer,
typeSpecified = true,
};
SearchMultiSelectField shopperSearchParam = new SearchMultiSelectField
{
#operator = SearchMultiSelectFieldOperator.anyOf,
operatorSpecified = true,
searchValue = new RecordRef[] { nsCustomerRef }
};
fileSearch.shopperJoin = new CustomerSearchBasic { internalId = shopperSearchParam };
}
SearchResult result = netSuiteService.search(fileSearch);
// Get connected objects
{
Customer customer = GetCustomerById(netSuiteService, customerId);
Account account = GetAccountById(netSuiteService, "301395"); //
Folder folder = GetFolderById(netSuiteService, "3962");
}
File file = (File)result.recordList.First();
byte[] fileContent = GetFileContentByInternalId(file.internalId);
}
}
.
Try this:
var nsCustomerRef = new RecordRef
{
internalId = "4",
type = RecordType.employee,
typeSpecified = true,
};
var currentUser = new SearchMultiSelectField()
{
operatorSpecified = true,
#operator = SearchMultiSelectFieldOperator.anyOf,
searchValue = new List<RecordRef>() {nsCustomerRef}.ToArray()
};
var fileSearchBasic = new FileSearchBasic() {owner = currentUser};
var fileSearch = new FileSearch() { basic = fileSearchBasic };
var result = netSuiteService.search(fileSearch);
var file = (File)result.recordList.First();

Categories