Hi Pierre,
Have you tried adding the [Key] token to your .NET DataStore? (See the [Key] token added to the Primary Key column in the following example)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using SnapObjects.Data;
using DWNet.Data;
using Newtonsoft.Json;
namespace Appeon.ApiDoc.Models
{
[DataWindow("d_department", DwStyle.Grid)]
[Table("Department", Schema = "dbo")]
#region DwSelectAttribute
[DwSelect("PBSELECT( VERSION(400) TABLE(NAME=\"Department\" ) @(_COLUMNS_PLACEHOLDER_) )")]
#endregion
[UpdateWhereStrategy(UpdateWhereStrategy.KeyAndConcurrencyCheckColumns)]
[DwKeyModificationStrategy(UpdateSqlStrategy.DeleteThenInsert)]
[DwTemplate(DataFormat.Xml, "xml_default", "Templates\\xml_setparameter_default.xml", IsDefault = true)]
public class D_Department
{
[Key]
[DwColumn("Department", "DepartmentID")]
public int Departmentid { get; set; }
[ConcurrencyCheck]
[DwColumn("Department", "Name")]
public string Name { get; set; }
[ConcurrencyCheck]
[DwColumn("Department", "Budget")]
public decimal Budget { get; set; }
[ConcurrencyCheck]
[DwColumn("Department", "StartDate")]
public DateTime Startdate { get; set; }
[ConcurrencyCheck]
[DwColumn("Department", "Administrator")]
public int? Administrator { get; set; }
}
}
Regards,
This is not a bug with the DataWindow Converter.
This is the limitation of the RetrieveByKey method of .NET DataStore This RetrieveByKey method is not existing in PowerBuilder. It is designed to reuse the key and table defined in the model to build a simple SQL Select statement to only retrieve data by key.
For a non-updatable DataWindow, we don't know which is the updatable table and its key from the DataWindow syntax, so we can't generate [Table] and [Key] attributes. Pierre can add [Key] and [Table] attributes by hand. Or modify this DataWindow to make it updateable in PowerBuilder, then convert .NET DataStore model again.
Regards, Logan
Your explanations are very clear, thank you.
In my example, I should have used the Retrieve() method instead of RetrieveByKey().
Thanks a lot.
Pierre