EditorWidget - не сохраняются данные.

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

EditorWidget - не сохраняются данные.

Сообщение Tereha » 04 дек 2013, 15:40

Уважаемые Гуру!
Пытаюсь использовать EditorWidget control для редактирования слоя с feature access. Удаление элементов слоя выполняется нормально, в том числе в базе геоданных (sql express). Однако результаты редактирования элементов
не сохраняются. Если создать новый элемент и его редактировать, то на карте выполняется нормально, а в геобазе данных результаты не сохраняются.
При редактировании элемента , существующего в базе геоданных - форма редактирования открывается нормально с активными двумя кнопками - Ok, Delete. Если просто перейти с одного поля на другое (даже без редактирования), то кнопка Ok становится недоступной - данные невозможно сохранить ни на карте ни в базе геоданных.
Редактирование этого слоя в arcgis.com map (я запускаю его из свойств сервиса по url http://terentievai:6080/arcgis/rest/ser ... reServer/0) выполняется нормально , результаты сохраняются в том числе в базе геоданных.

XAML:

Код: Выделить всё

 <esri:Map x:Name="MyMap" Background="White" WrapAround="true" Extent="6095000,6810000,6900000,7258000">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseEnter">
                    <ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
                        <ei:ChangePropertyAction.Value>
                            <Visibility>Collapsed</Visibility>
                        </ei:ChangePropertyAction.Value>
                    </ei:ChangePropertyAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <esri:ArcGISDynamicMapServiceLayer ID="BaseLayer" 
              Url="http://terentievai:6080/ArcGIS/rest/services/rk/MapServer" />

            <esri:ArcGISDynamicMapServiceLayer ID="chsLayer" 
              Url="http://terentievai:6080/ArcGIS/rest/services/chs/MapServer" />

            <esri:FeatureLayer ID="myEvents" DisableClientCaching="True" 
                               AutoSave="False"
                               Url="http://terentievai:6080/ArcGIS/rest/services/chs/FeatureServer/0" 
                               OutFields="*"
                               Mode="OnDemand" />
        </esri:Map>
        <StackPanel Orientation="Vertical" HorizontalAlignment="Right" Margin="0,80,224,0"   VerticalAlignment="Top" >
            <esri:EditorWidget x:Name="MyEditorWidget"
                             Map="{Binding ElementName=MyMap}" 
                                      Width="300" 
                                      AutoSelect="False"
                                      AlwaysDisplayDefaultTemplates="True" 
                                      GeometryServiceUrl="http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"
                                      ShowAttributesOnAdd="True"  
                                      Loaded="EditorWidget_Loaded"/>
        </StackPanel>
и code behind:

Код: Выделить всё

namespace Module2
{
    public partial class MapControl : UserControl
    {
        public MapControl()
        {
            InitializeComponent();
        }

        private void ArcGISDynamicMapServiceLayer_Initialized(object sender, EventArgs e)
        {
            ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer myArcGISDynamicMapServiceLayer =
                  MyMap.Layers["chsLayer"] as ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer;
            int[] myVisibleLayers = {0};
            myArcGISDynamicMapServiceLayer.VisibleLayers = myVisibleLayers;
        }

        private void EditorWidget_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            string[] myLayerIDs = { "myEvents" };
            MyEditorWidget.LayerIDs = myLayerIDs;
        }
    }
}
Свойства сервиса:

Код: Выделить всё

Layer: events (ID: 0)

View In:   ArcGIS.com Map 

Name: events 

Display Field: name 

Type: Feature Layer 

Geometry Type: esriGeometryPoint 

Description: 

Definition Expression: N/A 

Copyright Text: 

Default Visibility: true 

MaxRecordCount: 1000

Supported Query Formats: JSON, AMF

Min Scale: 0

Max Scale: 0

Supports Advanced Queries: true

Supports Statistics: true

Extent:
XMin: 6351082.909999
YMin: 6816741.669999
XMax: 6686624.070001001
YMax: 7331495.690001001
Spatial Reference: 28406  (28406) 


Drawing Info:
Renderer:
Simple Renderer:
Symbol:

Label: 
Description:
Transparency: 0 
Labeling Info:

HasZ: false 

HasM: false 

Has Attachments: false 

HTML Popup Type: esriServerHTMLPopupTypeAsHTMLText 

Type ID Field: 

Fields:
id ( type: esriFieldTypeInteger , alias: id , editable: false , nullable: false )
status ( type: esriFieldTypeInteger , alias: status , editable: true , nullable: true )
name ( type: esriFieldTypeString , alias: name , editable: true , nullable: true , length: 255 )
dateTime ( type: esriFieldTypeDate , alias: dateTime , editable: true , nullable: true , length: 36 )
punct ( type: esriFieldTypeDouble , alias: punct , editable: true , nullable: true )
event_type ( type: esriFieldTypeInteger , alias: event_type , editable: true , nullable: true )
object ( type: esriFieldTypeInteger , alias: object , editable: true , nullable: true )
description ( type: esriFieldTypeString , alias: description , editable: true , nullable: true , length: 255 )
region ( type: esriFieldTypeDouble , alias: region , editable: true , nullable: true )
settle ( type: esriFieldTypeInteger , alias: settle , editable: true , nullable: true )
control ( type: esriFieldTypeSmallInteger , alias: control , editable: true , nullable: true )
dolgotaGrad ( type: esriFieldTypeInteger , alias: dolgotaGrad , editable: true , nullable: true )
dolgotaMin ( type: esriFieldTypeInteger , alias: dolgotaMin , editable: true , nullable: true )
dolgotaSec ( type: esriFieldTypeDouble , alias: dolgotaSec , editable: true , nullable: true )
dolgP ( type: esriFieldTypeString , alias: dolgP , editable: true , nullable: true , length: 1 )
shirotaGrad ( type: esriFieldTypeInteger , alias: shirotaGrad , editable: true , nullable: true )
shirotaMin ( type: esriFieldTypeInteger , alias: shirotaMin , editable: true , nullable: true )
shirotaSec ( type: esriFieldTypeDouble , alias: shirotaSec , editable: true , nullable: true )
shirP ( type: esriFieldTypeString , alias: shirP , editable: true , nullable: true , length: 1 )
harCHS ( type: esriFieldTypeInteger , alias: harCHS , editable: true , nullable: true )
infSorce ( type: esriFieldTypeString , alias: infSorce , editable: true , nullable: true , length: 255 )
mashtab ( type: esriFieldTypeInteger , alias: mashtab , editable: true , nullable: true )
data_loc ( type: esriFieldTypeDate , alias: data_loc , editable: true , nullable: true , length: 36 )
data_likv ( type: esriFieldTypeDate , alias: data_likv , editable: true , nullable: true , length: 36 )
X ( type: esriFieldTypeDouble , alias: X , editable: true , nullable: true )
Y ( type: esriFieldTypeDouble , alias: Y , editable: true , nullable: true )
ObjectID ( type: esriFieldTypeOID , alias: ObjectID , editable: false , nullable: false )
Templates:
Name: events
Description: 
Prototype:
id: 0
Drawing Tool: esriFeatureEditToolPoint

Capabilities: Create,Delete,Query,Update,Uploads,Editing

Sync Can Return Changes: false

Is Data Versioned: false

Supports Rollback On Failure: true

Supported Operations:   Query   Apply Edits   Add Features   Update Features   Delete Features   Generate Renderer   Return Updates

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: EditorWidget - не сохраняются данные.

Сообщение Tereha » 05 дек 2013, 11:44

Я взял из примера для EditorWidget редактируемые слои и добавил свой слой Событий. Слои из примера - редактируются нормально. Для определенности - изменяем поле description , сохраняем, перезапускаем debugger visual studio или обновляем окно в браузере. Изменения - сохранились.
Если то же проделать со слоем событий events - то , как описано выше - для существующих событий содержание поля можно изменить можно, но при переходе к следующему полю - кнопка Ok становится неактивной и в то время, когда информация изменена и кнопка активна - сохраняем и видим, что информация не сохранилась даже на карте.
Если событие создается заново - то можно нормально редактировать , сохранить - и на карте все сохраняется. Но при обновлении окна браузера, так же как и при перезапуске программы - видим, что информация не сохранилась.
Т.е. можно сделать вывод, что проблема в опубликованном сервисе. Но , с другой стороны, если тестировать слой из arcgis.com Map - то информация сохраняется в геобазе данных нормально. Удаление записей нормально выполняется во всех вариантах.
XAML последнего варианта :

Код: Выделить всё

<UserControl x:Class="Module2.MapControl"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

    <Grid x:Name="LayoutRoot">

        <esri:Map x:Name="MyMap" Background="White" WrapAround="true" Extent="6095000,6810000,6900000,7258000">
            <esri:ArcGISDynamicMapServiceLayer ID="BaseLayer" 
        		Url="http://terentievai:6080/ArcGIS/rest/services/rk/MapServer" />

            <esri:FeatureLayer ID="Points of Interest" DisableClientCaching="True" 
                               AutoSave="False"
                               Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/FeatureServer/0"
                               OutFields="*" 
                               Mode="OnDemand" />
            <esri:FeatureLayer ID="myEvents" DisableClientCaching="True" 
                               AutoSave="False"
                               Url="http://terentievai:6080/ArcGIS/rest/services/chs/FeatureServer/0" 
                               OutFields="*"
                               Mode="OnDemand" />
        </esri:Map>

        <StackPanel  x:Name="EditorToolStrip" Margin="0,5,5,0" >
            <Border Background="#00919191" CornerRadius="5"
            			HorizontalAlignment="Right"  VerticalAlignment="Top"
            			Padding="5" BorderBrush="Transparent">
                <Border.Effect>
                    <DropShadowEffect Color="Black" Direction="-45" BlurRadius="20" Opacity=".75" />
                </Border.Effect>
                <StackPanel Orientation="Vertical" HorizontalAlignment="Right" Margin="0,5,5,0"	VerticalAlignment="Top" >
                    <esri:EditorWidget x:Name="MyEditorWidget"
                             Map="{Binding ElementName=MyMap}" 
                                      Width="300" 
                                      AutoSelect="False"
                                      AlwaysDisplayDefaultTemplates="True" 
                                      GeometryServiceUrl="http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer"
                                      ShowAttributesOnAdd="True"  
                                      Loaded="EditorWidget_Loaded"/>
                </StackPanel>
            </Border>
        </StackPanel>
    </Grid>
</UserControl>

Code behind:

Код: Выделить всё

namespace Module2
{
    public partial class MapControl : UserControl
    {
        public MapControl()
        {
            InitializeComponent();
        }
        private void EditorWidget_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            string[] myLayerIDs = { "Points of Interest", "Evacuation Perimeter", "myEvents" };
            MyEditorWidget.LayerIDs = myLayerIDs;
        }
    }
}
Свойства опубликованного сервиса приведены в предыдущем сообщении.

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: EditorWidget - не сохраняются данные.

Сообщение Tereha » 11 дек 2013, 11:44

Может ли кто-нибудь подсказать - какие шаги предпринять по поиску почему не сохраняются данные?
Сейчас я убедился, что
1. В sql manager - данные изменяются нормально.
2. При тестировании слоя из arcgis.com - результаты редактирования сохраняются на sql server.
Сейчас подключение к sql server , которое используется сервисом, сделано от "sa" - допустимо ли это?

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: EditorWidget - не сохраняются данные.

Сообщение Tereha » 11 дек 2013, 16:12

На приложенных рисунках добавление нового элемента в своем приложении, результаты редактирования не сохраняются на sql server. На втором рисунке - то что видно в fiddler. И на следующем рисунке - то, что показывает fiddler при сохранении результатов редактирования того же слоя в arcgis.com.
Any ideas?
Вложения
arcgiscom11_12.jpg
Что видно в fiddler при сохранении результатов редактирования в arcgis.com
arcgiscom11_12.jpg (110.06 КБ) 5572 просмотра
fiddler11_12.jpg
Что показывает fiddler при попытке сохранить новый элемент
fiddler11_12.jpg (55.09 КБ) 5572 просмотра
карта11_12.jpg
Добавление нового элемента в своем приложении
карта11_12.jpg (76.94 КБ) 5572 просмотра

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: EditorWidget - не сохраняются данные.

Сообщение Tereha » 12 дек 2013, 11:21

На настоящий момент ситуация такова.
1. При тестировании сервиса с помощью arcgis.com видно , что операция изменения элемента слоя проходит нормально - изменения записываются на sql сервер. Т.е. , при добавлении символа в поле "name" (рис.1)- в тот же момент времени сразу появляется строка в fiddler с кодом 200(рис.2), и одновременно видны изменения в соответствующей строке базы геоданных.
2. Со страницы сервиса terentievai:6080/arcgis/rest/services/chs/FeatureServer/0/updateFeatures
я открываю форму для тестирования операции update и заполняю ее данными из fiddler (рис.3), после клика на Update features получаю сообщение об ошибке (рис.4). В то же время fiddler показывает, что операция выполнена с кодом 200. Это не понятно.
Возможно кто-то заметит что я делаю не так и как можно исправить ситуацию?
Вложения
pict3.jpg
Запуск обновления строки в геобазе из браузера
pict3.jpg (88.55 КБ) 5531 просмотр
pict2.jpg
Результат выполнения операции в fiddler
pict2.jpg (115.41 КБ) 5531 просмотр
pict1.jpg
Тестирование слоя в arcgis.com
pict1.jpg (148.07 КБ) 5531 просмотр

Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: EditorWidget - не сохраняются данные.

Сообщение Tereha » 12 дек 2013, 13:32

С выполнением операции из браузера разобрался - были не правильные двойные кавычки. Я набирал команду во word, т.к. не смог найти как скопировать значение в fiddler. Правильный текст приаттачен
Вложения
pict6.jpg
Выполнение команды из браузера
pict6.jpg (89.92 КБ) 5521 просмотр

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя