Разрешение на включение определенных полей зависит от CurrentUserID Epicor ERP10
Мне нужна помощь. Мне нужно включить определенные поля, зависит от CurrentUserID. Есть одно поле, которое UltraCombo содержит имя сотрудника. Когда имя сотрудника выбрано, другие поля должны быть включены, если идентификатор CurrentUserID совпадает с именем выбранного сотрудника. В противном случае остальные поля должны быть заблокированы. Я пытался использовать метод CanView в коде, но я не знаю, как вызвать команду SQL. Пожалуйста, помогите мне TT
private bool CanView(string field)
{
bool result = true;
EpiDataView edv = oTrans.EpiDataViews["CallContextClientData"] as EpiDataView;
string CurrentUser = edv.dataView[edv.Row]["CurrentUserId"].ToString();
string ConnectionString = "Data Source=RWNAERP;Initial Catalog=ERP10TESTRWNA;Persist Security Info=True;User ID=sa;Password=Epicor10";
string CompanyId = ((Ice.Core.Session)(oTrans.Session)).CompanyID;
string UserID = ((Ice.Core.Session)(oTrans.Session)).UserID;
using (SqlConnection connection1 = new SqlConnection(ConnectionString))
{
DataTable dt = new DataTable();
connection1.Open();
SqlCommand cmd = new SqlCommand("SELECT DcdUserID FROM dbo.UserFile WHERE Name=@Name AND EmpID=@EmpID", connection1);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("DcdUserID", SqlDbType.NVarChar).Value = UserID;
SqlDataAdapter sqlDa = new SqlDataAdapter(cmd);
sqlDa.Fill(dt);
if (dt.Rows.Count > 0)
{
result = false;
}
if (CurrentUser != "")
{
result = true;
}
connection1.Close();
connection1.Dispose();
}
1 ответ
То, что вы пытаетесь сделать, находится на клиенте, но клиент подключается только к AppServer и никогда к базе данных SQL. Только AppServer должен подключаться к базе данных.
Предполагая, что вы добавляете этот код как скрипт настройки, гораздо проще получить информацию о текущем пользователе из переменной Session, т.е.
var session = (Ice.Core.Session)oTrans.Session;
var userId = session.UserID;
var userName = session.UserName;
var userEmail = session.UserEmail;
В клиентских полях Epicor.exe отключение полей лучше всего делать с помощью RowRule, т.е.
var callContextClientData = oTrans.Factory("CallContextClientData");
var disableFieldsForUser = new RowRule("CurrentUserId", RuleCondition.Equals, ((Ice.Core.Session)trans.Session).UserID);
disableFieldsForUser.AddAction(RuleAction.AddControlSettings(stockDtlEpiDataView, "CallContextClientData.ShortChar01", SettingStyle.Disabled));
callContextClientData.AddRowRule(disableFieldsForUser);
Не ясно, какие поля вы подходите или какие хотите отключить, но, надеюсь, это поможет вам начать.