Search Results

Search found 25747 results on 1030 pages for 'tree view'.

Page 735/1030 | < Previous Page | 731 732 733 734 735 736 737 738 739 740 741 742  | Next Page >

  • iPhone XCODE Programming make a UIWebView Scrollable

    - by Antonio Murgia
    here is the problem! I have a UIWebView in my programs that loads a php page. The problem is that if the page has a lot of lines i cannot see them. I can "scroll" the UIWebView but when I leave the finger from the screen the page comes back to the original state. I don't want to scale pages to fit the view cause if I do that the letters become too small. I would like to find a way to scroll pages how it is possible in Safari. Hope i have explained the problem. Thank you in advance Antonio

    Read the article

  • MVVM/ViewModels and handling Authorization

    - by vdh_ant
    Hey guys Just wondering how how people handle Authorization when using MVVM and/or View Models. If I wasn't using VM's I would be passing back the Model and it would have a property which I could check if a user can edit a given object/property but when using MVVM I am disconnecting myself from the business object... and thus doen't know what the security should be any more. Is this a case where the mapper should be aware of the Authorization that is in place and don't copy across the data if the Authorization check fails. If this was the case I am guessing that the mapper would have to see some properties on the VM to let the interface know which fields are missing data because of the Authorization failure. If this does occur within the mapper, how does this fit in with things like AutoMapper, etc. Cheers Anthony

    Read the article

  • How to display and update data in MVC2

    - by Picflight
    Table Product Product Id Product Name Table ProductSupplier ProductSupplierId ProductId SupplierId Table Supplier SupplierId SupplierName I have the above 3 tables in my database, ProductSupplier is the lookup table. Each Product can have many suppliers. I am using Entity Framework. Using Web Forms it was fairly easy to display a Product on a web page and bind a repeater with the suppliers information. Also, with Web Forms it was easy to Add new Product and suppliers, the linkage seemed easy. How do you do this sort of functionality in MVC? In the Create View below, I want to be able to Add the Supplier as well. Is there a better approach that I might be missing here? This is how I did it with Web Forms. Beyond the code below I am totally lost. I can show data in a list and also display the Suppliers for each Product, but how do I Add and Edit. Should I break it into different views? With Web Forms I could do it all in one page. namespace MyProject.Mvc.Models { [MetadataType(typeof(ProductMetaData))] public partial class Product { public Product() { // Initialize Product this.CreateDate = System.DateTime.Now; } } public class ProductMetaData { [Required(ErrorMessage = "Product name is required")] [StringLength(50, ErrorMessage = "Product name must be under 50 characters")] public object ProductName { get; set; } [Required(ErrorMessage = "Description is required")] public object Description { get; set; } } public class ProductFormViewModel { public Product Product { get; private set; } public IEnumerable<ProductSupplier> ProductSupplier { get; private set; } public ProductFormViewModel() { Product = new Product(); } public ProductFormViewModel(Product product) { Product = product; ProductSupplier = product.ProductSupplier; } } } ProductRepository public Product GetProduct(int id) { var p = db.Product.FirstOrDefault(por => por.ProductId == id); p.ProductSupplier.Attach(p.ProductSupplier.CreateSourceQuery().Include("Product").ToList()); return p; } Product Create View <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyProject.Mvc.Models.ProductFormViewModel>" %> <%= Html.ValidationSummary("Please correct the errors and try again.") %> <% using (Html.BeginForm()) {%> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.ProductId) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.ProductId) %> <%= Html.ValidationMessageFor(model => model.Product.ProductId) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.ProductName) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.ProductName) %> <%= Html.ValidationMessageFor(model => model.Product.ProductName) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.Product.Description) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.Product.Description) %> <%= Html.ValidationMessageFor(model => model.Product.Description) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %>

    Read the article

  • django internationalization doesn't work

    - by xRobot
    I have: * created translation strings in the template and in the application view. * run this command: django-admin.py makemessages -l it and the file it/LC_MESSAGES/django.po has been created * translated strings in the django.po file. * run this command: django-admin.py compilemessages and I receive: processing file django.po in /home/jobber/Desktop/library/books/locale/it/LC_MESSAGES * set this in settings.py: LANGUAGE_CODE = 'it' TEMPLATE_CONTEXT_PROCESSORS = ( "django.core.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", ) USE_I18N = True MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ) but.... translation doesn't work !! I always see english text. Why ?

    Read the article

  • JQuery Pure Template

    - by cem
    I cant figure out whats wrong. Its working when i tried to refresh only topics but it doesnt works when tried to refresh topics and page-links. ie. topics table's refreshing, and 'pagelinks' disappearing, i thought pure cannot reach - read second template node. By the way, i tested their code, first message box show up all of nodes - includes 'pagelinks' node, but second one - in function only show up topic rows. Its look like a bug. Anyone knows how can i solve this? ps. I'm using latest version of pure. Thanks. Test Code - pure.js line: 189 function dataselectfn(sel) { // ... m = sel.split('.'); alert(m.toSource()); return function (ctxt) { var data = ctxt.context; if (!data) { return ''; } alert('in function: ' + m.toSource()); // ... Json: {"topics":[{"name":"foo"}],"pagelinks":[{"Page":1},{"Page":2}]} HTML - before pure rendering: <table> <tbody> <tr> <td class="pagelinks"> <a page="1" href="/Topics/IndexForAreas?page=1" class="p Page@page">1</a> </td> <td class="pagelinks"> <a page="2" href="/Topics/IndexForAreas?page=2" class="p Page@page">2</a> </td> </tr> </tbody> </table> HTML - after pure rendering: <table> <tbody> <tr> </tr> </tbody> </table> Controller: [Transaction] public ActionResult IndexForAreas(int? page) { TopicService topicService = new TopicService(); PagedList<Topic> topics = topicService.GetPaged(page); if (Request.IsAjaxRequest()) { return Json(new { topics = topics.Select(t => new { name = t.Name, }), pagelinks = PagingHelper.AsPager(topics, 1) }); } return View(topics); } ASP.NET - View: <div class="topiccontainer"> <table> <% foreach (Topic topic in ViewData.Model) { %> <tr class="topics"> <td> <%= Html.ActionLink<ForumPostsController>(ec => ec.Index(topic.Name, null), topic.Name, new { @class="name viewlink@href" })%> </td> //bla bla... </tr> <%} %> </table> <table> <tr> <% Html.Pager(Model, 1, p => { %> <td class="pagelinks"> <%= Html.ActionLink<TopicsController>(c => c.IndexForAreas(p.Page), p.Page.ToString(), new { page = p.Page, @class = "Page@page" })%> </td> <% }); %> </tr> </table> </div> Master Page: <% Html.RenderAction("IndexForAreas", "Topics", new { area = "" }); %> <script type="text/javascript"> $.post("<%= Html.BuildUrlFromExpressionForAreas<TopicsController>(c => c.IndexForAreas(null)) %>", { page: page }, function (data) { $(".topiccontainer").autoRender(data); }, "json" ); </script>

    Read the article

  • Wider than expected margins with CGContextDrawPDFPage

    - by skantner
    I'm rendering PDF pages on iPhone using the code below. It works, but the margins seem much wider than when I view the same PDF using a Acrobat Reader or the Mac's Preview, and that consequently scales the content down much smaller than it otherwise would be. Is my code actually causing this behavior? CGContextSetStrokeColorWithColor(context, backgroundColor.CGColor); CGContextSetFillColorWithColor(context,backgroundColor.CGColor); CGContextSetLineWidth(context, 2.0); CGContextAddRect(context, CGRectMake(0.0,0.0, self.bounds.size.width, self.bounds.size.height)); CGContextDrawPath(context, kCGPathFillStroke); CGContextTranslateCTM(context, 0.0, self.bounds.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGPDFPageRef page = CGPDFDocumentGetPage(myPDF, (size_t) pageNum); CGContextSaveGState(context); CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFMediaBox, self.bounds, 0, true); CGContextConcatCTM(context, pdfTransform); CGContextDrawPDFPage(context, page); CGContextRestoreGState(context);

    Read the article

  • Rails User-Profile model challenges

    - by Craig
    I am attempting to create an enrollment process similar to SO's: route to an OpenID provider provider returns the user's information to the UsersController (a guess) UsersController creates user, then routes to the ProfilesController's new or edit action. For now, I'm simply trying to create the user, then route to the ProfilesController's new or edit action (not sure which I should be using). Here's what I have thus far: Models: class User < ActiveRecord::Base has_one :profile end class Profile < ActiveRecord::Base belongs_to :user end Routes: map.resources :users do |user| user.resource :profile end new_user_profile GET /users/:user_id/profile/new(.:format) {:controller=>"profiles", :action=>"new"} edit_user_profile GET /users/:user_id/profile/edit(.:format) {:controller=>"profiles", :action=>"edit"} user_profile GET /users/:user_id/profile(.:format) {:controller=>"profiles", :action=>"show"} PUT /users/:user_id/profile(.:format) {:controller=>"profiles", :action=>"update"} DELETE /users/:user_id/profile(.:format) {:controller=>"profiles", :action=>"destroy"} POST /users/:user_id/profile(.:format) {:controller=>"profiles", :action=>"create"} users GET /users(.:format) {:controller=>"users", :action=>"index"} POST /users(.:format) {:controller=>"users", :action=>"create"} new_user GET /users/new(.:format) {:controller=>"users", :action=>"new"} edit_user GET /users/:id/edit(.:format) {:controller=>"users", :action=>"edit"} user GET /users/:id(.:format) {:controller=>"users", :action=>"show"} PUT /users/:id(.:format) {:controller=>"users", :action=>"update"} DELETE /users/:id(.:format) {:controller=>"users", :action=>"destroy"} Controllers: class UsersController < ApplicationController # generate new-user form def new @user = User.new end # process new-user-form post def create @user = User.new(params[:user]) if @user.save redirect_to new_user_profile_path(@user) ... end end # generate edit-user form def edit @user = User.find(params[:id]) end # process edit-user-form post def update @user = User.find(params[:id]) respond_to do |format| if @user.update_attributes(params[:user]) flash[:notice] = 'User was successfully updated.' format.html { redirect_to(users_path) } format.xml { head :ok } ... end end end class ProfilesController < ApplicationController before_filter :get_user def get_user @user = User.find(params[:user_id]) end # generate new-profile form def new @user.profile = Profile.new @profile = @user.profile end # process new-profile-form post def create @user.profile = Profile.new(params[:profile]) @profile = @user.profile respond_to do |format| if @profile.save flash[:notice] = 'Profile was successfully created.' format.html { redirect_to(@profile) } format.xml { render :xml => @profile, :status => :created, :location => @profile } ... end end end # generate edit-profile form def edit @profile = @user.profile end # generate edit-profile-form post def update @profile = @user.profile respond_to do |format| if @profile.update_attributes(params[:profile]) flash[:notice] = 'Profile was successfully updated.' # format.html { redirect_to(@profile) } format.html { redirect_to(user_profile(@user)) } format.xml { head :ok } else format.html { render :action => "edit" } format.xml { render :xml => @profile.errors, :status => :unprocessable_entity } end end end Edit-User View: ... <% form_for(@user) do |f| %> ... New-Profile View: ... <% form_for([@user,@profile]) do |f| %> .. I'm having two problems: When saving an edit to the User model, the UsersController attempts to route to http://localhost:3000/users/1/profile.%23%3Cprofile:0x10438e3e8%3E, instead of http://localhost:3000/users/1/profile When the new-profile form is being rendered, it throws an error that reads: undefined method `user_profiles_path' for # Is it better to create a blank profile when the user is created (in the UsersController), then edit it OR follow the rest-ful convention of creating the profile in the ProfilesController (as I have done)? What am I missing? I did review Associating Two Models in Rails (user and profile), but it didn't address my needs. Thanks for your time.

    Read the article

  • iPhone SDK: Transparent tableviewcell isn't transparent?

    - by Harkonian
    I have a UITableViewController that has a background image. I am setting the image for the tableview like this: [self.view setBackgroundColor: [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"background1.jpg"]]]]; The problem is, each of my custom tableview cells get the same background image--it's repeated in each cell. As a test, I tried making everything in my cell transparent with an alpha of 0.0, but even then although I can't see any of the labels in each cell, I still see the background image repeated in each cell: cell.backgroundColor = [UIColor clearColor]; cell.contentView.backgroundColor = [UIColor clearColor]; cell.contentView.alpha = 0.0; cell.alpha = 0.0; Any suggestions on how to get my table's background image to stop repeating in each cell would be appreciated!

    Read the article

  • Suggestion for dragster/dropzone like dock menu

    - by Ger Teunis
    I'd like to create a dragster/dropzone like dock menu. Looks a bit like a stack with a nsview in it. After a lot if documentation searching and googling I've found a way to determine a dock icon's location. (http://cocoadev.com/forums/comments.php?DiscussionID=1431) Is nzbdrop creating a view which just looks like an stack to display it's menu or is there a better way of creating this? Additional info: I'm not looking for the drop like functionality just the nice way the DropBox window is displayed as an bubble/stack menu on top of it's app icon.

    Read the article

  • UIScrollview setContentOffset immediate animation?

    - by Jess
    Is there anyway to get the setContentOffset animation to happen immediately instead of waiting until the app returns to the main run loop? I tried setting the animation property to NO and nesting inside of an animation block but it still waits until returning to the main run loop. I've also tried using a sub method to perform the animation. My problem is I perform some heavy work after setting the contentOffset so the scroll view waits until this work is complete to animate the setting of the content offset so it appears to lag for a second.

    Read the article

  • Html table to csv table with image

    - by Joseph
    How to export this html table in to CSV example table: i want this table to be exported to csv .so how to achieve using JQUERY? <html> <body bgcolor="cyan"> <table border="1" align="center" > <br><a href="imp2.csv">Click Here To View In CSV format</a><img src="up.jpg" align="middle" width="39" height="32" /> <tr> <th>ID</th> <th>Name</th> <th>Month</th> <th>Savings</th> </tr> </table> </body> </html> Thanks Joseph

    Read the article

  • How to page while maintaining the querystring values in ASP.Net Mvc 2

    - by Picflight
    I am using the pager provided by Martijin Boland to implementing paging in my Asp.Net Mvc 2 application. My form uses the GET method to send all parameters to the querystring, it is a search form with several form elements. <% using (Html.BeginForm("SearchResults", "Search", FormMethod.Get)) {%> On the SearchResults View I am trying to implement paging: <div class="pager"> <%= Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount, new { Request.QueryString })%> </div> The Html.Pager has some overloads which I am not too clear on how to use. The Request.QueryString makes the querystring look like this: http://localhost:1155/Search/SearchResults?QueryString=Distance%3D10%26txtZip%3D%26cb&page=2 Should it not be like this? http://localhost:1155/Search/SearchResults?Distance=20&txtZip=10021&page=2

    Read the article

  • Local Declaration "x" hides instance variable xcode warning

    - by Michael Robinson
    I've been have trouble understand this problem. If I change the variable name fifthViewController the error goes away but the view controller doesn't load. Lost. Once again it's probably something simple. Thanks in advance. Here is the code: { FifthViewController *fifthViewController = [[FifthViewController alloc] initWithNibName:@"FifthView" bundle:nil]; fifthViewController.transactionID = transactionID; [self.navigationController pushViewController:fifthViewController animated:NO]; [fifthViewController release]; }

    Read the article

  • UIButton on UIScrollView can't work

    - by william-hu
    Hi, i used UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 180, 180)]; myLabel.backgroundColor = [UIColor greenColor]; [self.view addSubview:myLabel]; UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [self addTarget:self action:@selector(show) forControlEvents:UIControlEventTouchDown]; myButton.frame = CGRectMake(80.0, 120.0, 30, 30); myButton.showsTouchWhenHighlighted = YES; [self addSubview:myButton]; in this way the button works(call show:), but use [myLabel addSubview:myButton]; the button can't work. who can tell me why? I have tried to change the target to myLabel, can't work too.So who can tell me,thank you. By the way , i want to use the button on the UILabel,and the UILabel on UIScrollView.Thanks a lot!

    Read the article

  • Saving a single NSMutableDictionary in a plist

    - by yesimarobot
    I have one dictionary I need to save into a plist. The paletteDictionary always returns nil: - (void)saveUserPalette:(id) sender { [paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; // write plist to disk [paletteDictionary writeToFile:path atomically:YES]; } I'm reading the data back in a different view like: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:path]; if(plistDictionary==nil ){ NSLog(@"failed to retrieve dictionary from disk"); }

    Read the article

  • Add onchange event to a "locked" field in Dynamics CRM 4

    - by Evgeny
    I'm customising Dynamics CRM 4 and would like to modify the Form for the Case entity to add some JavaScript to the onchange event for the Knowledge Base Article lookup field (kbarticleid_ledit). However, when I click Change Properties for that field I get an error message: This field belongs to a locked section and cannot have its properties modified. How can I get around this and edit it? Is there a workaround similar to customizing the Article view? Or can I hack the DB somehow to "unlock" that field?

    Read the article

  • Android: Changing LinearLayout in a widget.

    - by Profete162
    Hello all, I have this really annoying problem: In my widget, i would like to change the background by code. I noticed on the Google doc than I can easily change the background of an Imageview: remoteViews.setImageViewResource(R.id.my_iv, R.drawable.my_bg); Ok, too easy, i want to change now the Linear layout.. What I read about the remoteview id that I can change a Bitmap, Int, Bool, String, etc... but not a drawable. So i guess i cannot use: remoteViews.setBitmap(R.id.my_ll,"setBackgroundDrawable",BitmapFactory.decodeResource(context.getResources(), R.drawablemy_bg)); I am totally disapointed and tried a last idea: views.setInt(R.id.my_ll,"setBackgroundResource",R.drawable.my_bg); But The logcat told me: android.widget.RemoteViews$ActionException:view: android.widget.LinearLayout can't use method with RemoteViews: setBackgroundResource(int) I am totally lost and I really don't know what to do... I would really appreciate any help. Thank a lot!

    Read the article

  • Render html code in sql server client report (rdlc)

    - by masoud ramezani
    I am using the asp.net web application and microsoft visual studio reportviewer control and rdlc for creating a report ( not using sql server reporting). I used the Product table to view the result. It has five fields and I display all the itemsin the report. One field is Description and it store the html code as the value(eg: <div><ul><li>a</li><li>b</li></ul><b>aaaa</b></div> ). I want to disply the output of this html code in my report's description field. But in my report, it shows the html value that I stored in my table (: <div><ul><li>a</li><li>b</li></ul><b>aaaa</b></div> ). How can I render the html in my report. Please give me a solution.

    Read the article

  • sharp architecture question - no strongly typed views

    - by csetzkorn
    Hi, I am trying to get my head around the sharp architecture and used the visual studio template as described on the web: http://wiki.sharparchitecture.net/VSTemplatesAndCodeGen.ashx This is all cool. Unfortunately, I cannot add a strongly typed view as easily as I am used to ‘under’ asp.net mvc. What can I do to ‘enable’ this in VS 2008 Prof? I have also installed asp.net mvc 2.0 and would like to reflect this in my ‘vs studio sharp environment’. Any pointers would be very much appreciated. Many thanks in advance. Best wishes, Christian

    Read the article

  • How can the blank space in a C# comboBox be filled as a hint for the user?

    - by Jim Fell
    When a comboBox in C# is dynamically populated the comboBox appears blank until the user clicks on it to view the available items in the dropdown. Ideally, I would like to use this blank space (prior to clicking the dropdown) to be used to give the user a hint as to what s/he should do. For example, it might say something like, "Select such-and-such..." Is there a way to do this? I tried setting the Text property, but that didn't do anything. I am using Microsoft Visual C# 2008 Express Edition. Thanks.

    Read the article

  • GDB doesnt like my typedef

    - by yan bellavance
    It seems that the following is to deep for the debugger in Qt even though the program uses it without problem typedef QMap <int, QStringList> day2FileNameType; typedef QMap <int, day2FileNameType> month2day2FileNameType; typedef QMap <int, month2day2FileNameType> year2month2day2FileNameType; year2month2day2FileNameType y2m2d2f; now the first 2 typeDefs work okay with the debugger but the third one retrieving data for watch view (over 100 pending request) Is it wrong for me to try and use such a typedef as year2month2day2FileNameType?

    Read the article

  • addSubview animation

    - by Mike
    I have main UIView where I display different data. Then I put a button, which displays subview like this: - (IBAction) buttonClicked: (id) sender { UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)]; UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(25,25, 50,25)]; newLabel.text = @"some text"; [newView addSubview: newLabel]; [self.view addSubview: newView]; [newLabel release]; [newView release]; } newView appears fine, but it doesn't animate itself any way, it just appears immediately. How can I add some kind of animation when newView appears? Like zoom or slide down or something like that. Is there some simple code?

    Read the article

  • UIToolbar UIBarButtonItem Alignment question

    - by Luther Baker
    I need to create a UIToolbar that has two UIBarButtonItems. The 1st button must be centered and the 2nd item must be right aligned. I understand and use Flexible spacing and it works great when I need to balance buttons across the UIToolbar, but with only two buttons, I can't seem to perfectly center the middle button. I've even initialized the view.toolbarItems array with NSArray *items = [[NSArray alloc] initWithObjects:fixed, flex, center_button, flex, right_button, nil]; and set fixed.width = right_button.width ... but still, the center_button is never perfectly centered.

    Read the article

  • Codeigniter: How to build an edit form that uses form validation and re-population?

    - by Sergio
    Hi There, I have a simple form in codeigniter that I wish to use for the editing or records. I am at the stage where my form is displayed and the values entered into the corresponding input boxes. This is done by simply setting the values of said boxes to whatever they need to be in the view: <input type="text" value="<?php echo $article['short_desc'];?>" name="short_desc" /> But, if I wish to use form_validation in codeigniter then I have to add thos code to my mark-up: <input value="<?php echo set_value('short_desc')?>" type="text" name="short_desc" /> So not the value can be set with the set_value function should it need to be repopulated on error from the post data. Is there a way to combine the two so that my edit form can show the values to be edited but also re-populate? Thanks

    Read the article

  • Integrating Code Metrics in TFS 2010 Build

    - by Jakob Ehn
    The build process template and custom activity described in this post is available here: http://cid-ee034c9f620cd58d.office.live.com/self.aspx/BlogSamples/CodeMetricsSample.zip Running code metrics has been available since VS 2008, but only from inside the IDE. Yesterday Microsoft finally releases a Visual Studio Code Metrics Power Tool 10.0, a command line tool that lets you run code metrics on your applications.  This means that it is now possible to perform code metrics analysis on the build server as part of your nightly/QA builds (for example). In this post I will show how you can run the metrics command line tool, and also a custom activity that reads the output and appends the results to the build log, and also fails he build if the metric values exceeds certain (configurable) treshold values. The code metrics tool analyzes all the methods in the assemblies, measuring cyclomatic complexity, class coupling, depth of inheritance and lines of code. Then it calculates a Maintainability Index from these values that is a measure f how maintanable this method is, between 0 (worst) and 100 (best). For information on hwo this value is calculated, see http://blogs.msdn.com/b/codeanalysis/archive/2007/11/20/maintainability-index-range-and-meaning.aspx. After this it aggregates the information and present it at the class, namespace and module level as well. Running Metrics.exe in a build definition Running the actual tool is easy, just use a InvokeProcess activity last in the Compile the Project sequence, reference the metrics.exe file and pass the correct arguments and you will end up with a result XML file in the drop directory. Here is how it is done in the attached build process template: In the above sequence I first assign the path to the code metrics result file ([BinariesDirectory]\result.xml) to a variable called MetricsResultFile, which is then sent to the InvokeProcess activity in the Arguments property. Here are the arguments for the InvokeProcess activity: Note that we tell metrics.exe to analyze all assemblies located in the Binaries folder. You might want to do some more intelligent filtering here, you probably don’t want to analyze all 3rd party assemblies for example. Note also the path to the metrics.exe, this is the default location when you install the Code Metrics power tool. You must of course install the power tool on all build servers. Using the standard output logging (in the Handle Standard Output/Handle Error Output sections), we get the following output when running the build: Integrating Code Metrics into the build Having the results available next to the build result is nice, but we want to have results integrated in the build result itself, and also to affect the outcome of the build. The point of having QA builds that measure, for example, code metrics is to make it very clear how the code being built measures up to the standards of the project/company. Just having a XML file available in the drop location will not cause the developers to improve their code, but a (partially) failing build will! To do this, we need to write a custom activity that parses the metrics result file, logs it to the build log and fails the build if the values frfom the metrics is below/above some predefined treshold values. The custom activity performs the following steps Parses the XML. I’m using Linq 2 XSD for this, since the XML schema for the result file is available, it is vey easy to generate code that lets you query the structure using standard Linq operators. Runs through the metric result hierarchy and logs the metrics for each level and also verifies maintainability index and the cyclomatic complexity with the treshold values. The treshold values are defined in the build process template are are sent in as arguments to the custom activity If the treshold values are exceeded, the activity either fails or partially fails the current build. For more information about the structure of the code metrics result file, read Cameron Skinner's post about it. It is very simpe and easy to understand. I won’t go through the code of the custom activity here, since there is nothing special about it and it is available for download so you can look at it and play with it yourself. The treshold values for Maintainability Index and Cyclomatic Complexity is defined in the build process template, and can be modified per build definition: I have taken the default value for these settings from my colleague Terje Sandström post on Code Metrics - suggestions for approriate limits. You’ll notice that this is quite an improvement compared to using code metrics inside the IDE, where Red/Yellow/Green limits are fixed (and the default values are somewaht strange, see Terjes post for a discussion on this) This is the first version of the code metrics integration with TFS 2010 Build, I will proabably enhance the functionality and the logging (the “tree view” structure in the log becomes quite hard to read) soon. I will also consider adding it to the Community TFS Build Extensions site when it becomes a bit more mature. Another obvious improvement is to extend the data warehouse of TFS and push the metric results back to the warehouse and make it visible in the reports.

    Read the article

< Previous Page | 731 732 733 734 735 736 737 738 739 740 741 742  | Next Page >